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