Reputation: 123
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
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