RecyclerViewPool

来源:互联网 发布:网络动作游戏排行榜 编辑:程序博客网 时间:2024/06/16 10:40

什么是RecyclerViewPool呢?简言之就是,你可以给RecyclerView设置一个ViewHolder的对象池,这个池称为RecycledViewPool,这个对象池可以节省你创建ViewHolder的开销,更能避免GC。即便你不给它设置,它也会自己创建一个。

1.RecyclerViewPool的创建

//1.直接创建RecyclerView.RecycledViewPool pool = new RecyclerView.RecycledViewPool();//从RecyclerView中获取mRecyclerView.getRecycledViewPool();

2.RecyclerViewPool的使用

//第一个参数是item的类型,第二个是指改类型可以缓存最大个数myPool.setMaxRecycledViews(0, 10);LinearLayoutManager layout = new LinearLayoutManager(getContext()); //如果LayoutManager是LinearLayoutManager GridLayoutManager,则需要setRecycleChildrenOnDetach(true)layout.setRecycleChildrenOnDetach(true);mRecyclerView.setRecycledViewPool(pool);

3.实例

public class PagerActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_pager);        ViewPager pager = (ViewPager) findViewById(R.id.pager);        pager.setAdapter(new PageAdapter(getSupportFragmentManager()));    }    static class PageAdapter extends FragmentPagerAdapter{        RecyclerView.RecycledViewPool mPool = new RecyclerView.RecycledViewPool();        public PageAdapter(FragmentManager fm) {            super(fm);        }        @Override        public Fragment getItem(int i) {            RecyclerViewFragment f = new RecyclerViewFragment();            f.mPool = mPool;            return f;        }        // ...    }    public static class RecyclerViewFragment extends Fragment{        RecyclerView.RecycledViewPool mPool;        @Nullable        @Override        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {            RecyclerView view = new RecyclerView(inflater.getContext());            LinearLayoutManager layout = new LinearLayoutManager(inflater.getContext());            layout.setRecycleChildrenOnDetach(true);            view.setLayoutManager(layout);            if (mPool != null) {                view.setRecycledViewPool(mPool);            }            view.setAdapter(...);            return view;        }        // ...    }}