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