首页 > 代码库 > ViewPager的Adapter中视图重用

ViewPager的Adapter中视图重用

ViewPager的PagerAdapter不像ListView/GridView的BaseAdapter,它是没有内部视图重用机制的,也就是说我先inflate出来一个,然后调用destroyItem后,这个视图就被抛弃了,如果需要更多的视图,则需要再次inflate。如果ViewPager中的所有视图基本相同,就存在内存的浪费了。这里使用一个非常简单的方法实现视图的重用:

List<View> mViewList = new ArrayList<View>();

public Object instantiateItem(View container,  int position) {
        View view = null;
        if (mViewList.isEmpty) {
                inflate a new View
        } else {
                view = mViewList.remove(0);
        }
        ........
}

public void destroyItem(View container, int position, Object object) {
        View view = (View)object;
        ((ViewPager) container).removeView(view);
        mViewList.add(view);
        ........
}

其实很简单,就是定义一个List来回收View,当destroyItem的时候,把View加入到List中,当需要重新inflate的时候,则先判断一下List中是否存在回收过的View,如果有的话,就重用。这就解决了不断inflate视图,然后再destroy的问题。