ListView是Android曾经也是现在最常用的控件,item复用和界面卡顿等问题伴随着ListView一直没有断过,后来RecyclerView的出现解决了一些缓存复用的问题,确实RecyclerView拥有一套比较完善的缓存机制。但是我们今天的主角不是它,而是一个全新的控件。 有些时候我需要列表中在滑动的时候,一个view都不要重新绘制,我不需要item之间的相互复用,这样的情况下,外层一个ScrollView,里面一个LinearLayout,似乎就满足的条件,但是单纯的LinearLayout去当做ListView使用的时候还是要自己写不少逻辑。这次文章介绍的就是已经写好的一个自定义LinearLayout,完全可以当做一个无缓存的ListView使用,子界面不去频繁的重绘,就节省了很大一笔内存开销,界面滑动就会流畅,再复杂的列表嵌套,经测试也不会卡顿。好了,闲话少说,咱们直接看代码,首先就是重要的自定义控件NoCacheListView。
代码比较简洁,大家稍微看下,里面包含的配套的setAdapter方法,这是大家比较关心的,此类提供了两种,
1、setAdapter(),这个需要自己定义一个类继承本类中提供的Adapter,或者直接new NoCacheListView.Adapter()也可以;
2、setAdapter2(),这个方法就可以使用我们平时用的Adapter,也就是继承android.widget.BaseAdapter的适配器;
下面是NoCacheListView的完整代码,可以直接使用,
public class NoCacheListView extends LinearLayout implements View.OnClickListener {
boolean mLayoutFrozen = false;
private OnItemClickListener mListener;
private Adapter<?> mAdapter;
private android.widget.BaseAdapter mAdapter2;
private DataSetObserver mDataSetObserver = new DataSetObserver() {
@Override