1

我做了以下代码,但是屏幕外的视图似乎没有被适当地回收。

假设我有所有 60 个视图让 ViewPager 显示,它显示正确,但它没有重用视图,当我滑动到 ArrayList 的尾部时,前面的视图仍然没有回收(我猜是因为我滑动到最右边,然后再次向左滑动,没有重新加载的迹象)

我搜索了很多文章,但都和我在下面所做的一样,不知道重点在哪里。(这是我实际做的)

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) {

    }   
}
4

1 回答 1

2

有两个适配器,即PagerAdapter & FragmentStatePagerAdapter.

PagerAdapter 将页面/视图保存在堆栈中,并在使用的页面总数较少的情况下使用。另一方面,如果页面/视图的数量更多,则建议使用 FragmentStatePagerAdapter,因为它不会将保存视图/页面保存在堆栈中,而是在运行时创建它们。FragmentStatePagerAdapter 回收您的视图/页面。

我推荐使用 FragmentStatePagerAdapter。

于 2013-10-03T04:36:36.957 回答