我无法更新ViewPager中的内容。
在FragmentPagerAdapter类中,方法instantiateItem()和getItem()的正确使用方式是什么?
我之前只使用了getItem()来实例化和返回我的fragment:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
这个方法很有效,但我无法更改内容。
所以我找到了这个:ViewPager PagerAdapter not updating the View
现在我想要实现instantiateItem()来做到这一点。但我不知道我必须返回什么(类型为Object),以及getItem(int position)之间的关系是什么?“我的方法是在instantiateItem()方法中为任何实例化的视图使用setTag()方法”
我阅读了reference。
public abstract Fragment getItem (int position)
返回与指定位置相关联的Fragment。
public Object instantiateItem (ViewGroup container, int position)
为给定的位置创建页面。适配器负责将视图添加到此处给定的容器中,尽管它只需确保在从finishUpdate(ViewGroup)返回时完成此操作。
参数container 要显示该页的包含视图。 position 要实例化的页面位置。
返回值
返回表示新页面的对象。这不必是View,但可以是页面的其他容器。
但我仍然不理解。
这是我的代码。我正在使用support package v4。
ViewPagerTest
public class ViewPagerTest extends FragmentActivity {
private ViewPager pager;
private MyFragmentAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pager1);
pager = (ViewPager)findViewById(R.id.slider);
String[] data = {"page1", "page2", "page3", "page4", "page5", "page6"};
adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
pager.setAdapter(adapter);
((Button)findViewById(R.id.button)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
reload();
}
});
}
private void reload() {
String[] data = {"changed1", "changed2", "changed3", "changed4", "changed5", "changed6"};
//adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
adapter.setData(data);
adapter.notifyDataSetChanged();
pager.invalidate();
//pager.setCurrentItem(0);
}
}
我的Fragment适配器
class MyFragmentAdapter extends FragmentPagerAdapter {
private int slideCount;
private Context context;
private String[] data;
public MyFragmentAdapter(FragmentManager fm, int slideCount, Context context, String[] data) {
super(fm);
this.slideCount = slideCount;
this.context = context;
this.data = data;
}
@Override
public Fragment getItem(int position) {
return new MyFragment(data[position], context);
}
@Override
public int getCount() {
return slideCount;
}
public void setData(String[] data) {
this.data = data;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
我的Fragment
public final class MyFragment extends Fragment {
private String text;
public MyFragment(String text, Context context) {
this.text = text;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.slide, null);
((TextView)view.findViewById(R.id.text)).setText(text);
return view;
}
}
这里还有一个人遇到了类似的问题,但没有答案。 http://www.mail-archive.com/android-developers@googlegroups.com/msg200477.html