ViewPager显示重复的页面错误

时间:2014-08-29 23:36:27

标签: android android-fragments android-viewpager

我花了一整天的时间来寻找正确的答案,但找不到任何答案。

我有一个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;
}

当我在pagedata newInstance()中检查onCreate()MyFragment时,页面索引及其数据是正确的。

我尝试了上述代码的所有变体,即使用FragmentPagerAdapterinitialize and destroy fragment manually in adapter等,但它们都不适用于我。

有没有人可以分享你的智慧?

0 个答案:

没有答案