我无法更新ViewPager中的内容.
一个问题:FragmentPagerAdapter类中的方法instantiateItem()和getItem()的关系和正确用法是什么?
我只使用getItem()实例化并返回我的片段:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
Run Code Online (Sandbox Code Playgroud)
这很好用(但据说我不能改变内容).
所以我发现了这个:ViewPager PagerAdapter没有更新View
特别是在其中讨论了方法instantiateItem():
"我的方法是对instantiateItem()方法中的任何实例化视图使用setTag()方法"
所以现在我想实现instantiateItem()才能做到这一点.但我不知道我必须返回那里(return是Object)和getItem(int position)的关系是什么?
目前我正在使用getItem来实例化Fragment,这是错的吗?但是,我是否必须将片段放在实例变量中,或者根本不实现getItem()......?我只是不明白.
我试过阅读参考资料:
public abstract Fragment getItem(int position)
返回与指定位置关联的片段.
public Object instantiateItem(ViewGroup容器,int位置)
创建给定位置的页面.适配器负责将视图添加到此处给出的容器,但它必须确保在从finishUpdate(ViewGroup)返回时完成此操作.参数
容器包含将在其中显示页面的View.position要实例化的页面位置.
返回
返回表示新页面的Object.这不需要是View,但可以是页面的其他容器.
......但我仍然不明白它们是如何相关的以及我必须做些什么.
这是我的代码.我正在使用支持包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, …Run Code Online (Sandbox Code Playgroud) 我在ViewPager中引用我的片段时遇到问题.我想这样做是因为从我的活动中我想要在指定位置刷新片段(例如当前显示的片段).
目前我有这样的事情:
public static class MyPagerAdapter extends FragmentPagerAdapter {
private static final String TAG = "MyPagerAdapter";
private static HashMap<Integer, EventListFragment> mPageReferenceMap = new HashMap<Integer, EventListFragment>();
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
Log.i(TAG, "getItem: "+position);
int dateOffset = position-1;
EventListFragment mFragment = EventListFragment.newInstance(dateOffset);
mPageReferenceMap.put(position, mFragment);
return mFragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.i(TAG, "destroyItem: "+position);
mPageReferenceMap.remove(position);
super.destroyItem(container, position, object);
}
public …Run Code Online (Sandbox Code Playgroud)