Update data in ListFragment as part of ViewPager

后端 未结 10 2039
一整个雨季
一整个雨季 2020-11-22 07:55

I\'m using the v4 compatibility ViewPager in Android. My FragmentActivity has a bunch of data which is to be displayed in different ways on different pages in my ViewPager.

10条回答
  •  猫巷女王i
    2020-11-22 08:40

    If you ask me, the second solution on the below page, keeping track of all the "active" fragment pages, is better: http://tamsler.blogspot.nl/2011/11/android-viewpager-and-fragments-part-ii.html

    The answer from barkside is too hacky for me.

    you keep track of all the "active" fragment pages. In this case, you keep track of the fragment pages in the FragmentStatePagerAdapter, which is used by the ViewPager.

    private final SparseArray mPageReferences = new SparseArray();
    
    public Fragment getItem(int index) {
        Fragment myFragment = MyFragment.newInstance();
        mPageReferences.put(index, myFragment);
        return myFragment;
    }
    

    To avoid keeping a reference to "inactive" fragment pages, we need to implement the FragmentStatePagerAdapter's destroyItem(...) method:

    public void destroyItem(View container, int position, Object object) {
        super.destroyItem(container, position, object);
        mPageReferences.remove(position);
    }
    

    ... and when you need to access the currently visible page, you then call:

    int index = mViewPager.getCurrentItem();
    MyAdapter adapter = ((MyAdapter)mViewPager.getAdapter());
    MyFragment fragment = adapter.getFragment(index);
    

    ... where the MyAdapter's getFragment(int) method looks like this:

    public MyFragment getFragment(int key) {
        return mPageReferences.get(key);
    }
    

    "

提交回复
热议问题