Seraph J. Lin
Seraph J. Lin

Reputation: 123

Viewpager Adapter does not reuse views appropriately

I had do the following code, but the views that offscreen seems does not been recycle appropriately.

assume I have all 60 views to let ViewPager to show, it's display correctly, but it doesn't reuse the views, while I swipe to the tail of ArrayList, the views in preceding still not recycle (I guess it because of I swipe to the rightmost, then swipe to the left again, no sign of reloading)

I've search a lot articles, but all alike what I did below, not sure where's the point. (here's what I actually did)

public class MyPagerAdapter extends PagerAdapter{
    ArrayList<View> viewList =  new ArrayList<View>();

    public MyPagerAdapter(ArrayList<View> list) {
        this.viewList = list;
    }

    @Override
    public int getCount() {
        return viewList.size();
}

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View view = viewList.get(position);
        container.addView(view);
        return view;  
    }


    public void destroyItem(ViewGroup container, int position, Object view) {
        container.removeView((View)view);

    }



    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == (View)object;
    }

    @Override
    public void finishUpdate(View arg0) {

    }


    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1) {

    }

    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public void startUpdate(View arg0) {

    }   
}

Upvotes: 1

Views: 1850

Answers (1)

Jitender Dev
Jitender Dev

Reputation: 6925

There are two adapters i.e. PagerAdapter & FragmentStatePagerAdapter.

PagerAdapter saves pages/views in stack and is used where total number of pages used are lesser in number. On the other hand if the number of pages/views are more then it is recommended to use FragmentStatePagerAdapter because it does not save save views/pages in stack but creates them during runtime. FragmentStatePagerAdapter Recycles your views/pages.

I recommend to use FragmentStatePagerAdapter.

Upvotes: 2

Related Questions