我花了一整天的时间来寻找正确的答案,但找不到任何答案。
我有一个ViewPager,每个片段都有listview,并且它在第一页和第二页上不断显示重复数据。 (有时是其他两页,即第二和第三页)
假设我在每个片段上都有A,B,C,D,E列表视图,但是当我启动ViewPager时,它会显示B,B,C,D,E。我想这是因为FragmentStatePagerAdapter
会自动加载上一页和下一页,在我的情况下,似乎最后加载的数据超过了以前的数据。
这是我的适配器:
private class MyPagerAdapter extends FragmentStatePagerAdapter {
private ArrayList<MyFragment> mMyFragList;
public MyPagerAdapter(FragmentManager fm, ArrayList<MyFragment> list) {
super(fm);
mMyFragList = list;
}
@Override
public int getCount() {
return mMyFragList.size();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public MyFragment getItem(int position) {
return mMyFragList.get(position);
}
}
和ViewPager初始化部分:
public void updateView() {
setPagerFragment();
mPager = (ViewPager) mView.findViewById(R.id.menu_viewpager);
mAdapter = new MyAdapter(mActivity.getSupportFragmentManager(), mMyFrag);
mPager.setAdapter(mAdapter);
}
public void setPagerFragment() {
for(int i=0; i<mListData.size(); i++) {
// mListData is an ArrayList of MyPojo object
MyFragment fragment = MyFragment.newInstance(i, mListData.get(i));
mMyFrag.add(fragment);
}
}
这个updateView()
函数作为回调从另一个类调用,我检查mListData
在分配给Fragment之前和之后都有正确的数据。
此外,这是MyFragment中的newInstance()
:
public static MyFragment newInstance(int page, MyPojo data) {
MyFragment fragment = new MyFragment();
Bundle bundle = new Bundle();
String jsonObj = gson.toJson(data);
bundle.putInt(ARG_PAGE_NUMBER, page);
bundle.putString(ARG_PAGE_DATA, jsonObj);
fragment.setArguments(bundle);
return fragment;
}
当我在page
和data
newInstance()
中检查onCreate()
和MyFragment
时,页面索引及其数据是正确的。
我尝试了上述代码的所有变体,即使用FragmentPagerAdapter
或initialize and destroy fragment manually in adapter
等,但它们都不适用于我。
有没有人可以分享你的智慧?