ViewPager的Adapter中视图重用

ViewPager的PagerAdapter不像ListView/GridView的BaseAdapter,它是没有内部视图重用机制的,也就是说我先inflate出来一个,然后调用destroyItem后,这个视图就被抛弃了,假设须要很多其它的视图,则须要再次inflate。假设ViewPager中的全部视图基本同样,就存在内存的浪费了。这里使用一个很easy的方法实现视图的重用:

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);
        ........
}

事实上非常easy,就是定义一个List来回收View,当destroyItem的时候,把View增加到List中,当须要又一次inflate的时候,则先推断一下List中是否存在回收过的View,假设有的话,就重用。这就攻克了不断inflate视图,然后再destroy的问题。

posted @ 2014-07-07 13:54  mfrbuaa  阅读(178)  评论(0编辑  收藏  举报