【Android】第三方ONE开发之ListView的学习以及万能Adapter的打造


ListView的学习及万能Adapter的打造

ListView学习

ListView与RecyclerView的不同

  1. ListView可以用OnItemClickListener方便地对Item的点击事件作出回应。
  2. RecyclerView可以通过LayoutManager实现不同的布局效果。并且可设置横向或纵向滑动
  3. ListView本身没有ViewHolder,需要自己写ViewHolder来对其进行优化,而Recycler有了自己的ViewHolder,规范化了ViewHolder的写法。
  4. ListView可以设置选择模式,并添加MultiChoiceModeListener。
  5. RecyclerView在默认情况下并不在item之间展示间隔符,而在ListView中如果我们想要在item之间添加间隔符,我们只需要在布局文件中对ListView添加如下属性即可

打造ListView的万能Adapter

传统的Adapter写法

可以发现,传统的Adapter非常长,并且其中有许多重复的代码,我们完全可以把它们抽出来封装成一个更简单的Adapter,所以我们在这里做一个万能的Adapter。

打造通用ViewHolder

传统的ViewHolder是通过convertView的setTag,然后在后面进行获取holder的
convertView.setTag(holder);
ViewHolder中存放了Item中各种控件的引用。然后再在getView方法中来获取初始化ViewHolder等操作。
现在由于我们需要做成一个通用的,所以我们需要一个容器,来存储我们的控件。这里存储控件的容器,由于Map效率不是那么高,所以我们这里使用SparseArray来存储。它实际上也是Map,key为Integer,value为Object,它比传统的HashMap效率更高,以后若是key是Integer的Map,均可以用它。然后可以通过ViewHolder的getView(int id)来获取到我们的控件。

代码如下

下面是我们运用了通用ViewHolder的Adapter,可以看到,相比原来的传统Adapter,代码量减少了一些。

二、打造通用的Adapter

观察传统的Adapter的代码可以发现,除了getView的代码不太一样以外,其余基本都大同小异,因此我们可以建立一个CommonAdapter类,抽取重复部分。

于是,当我们写Adapter时,就只需要这样写就好了:

可以发现,代码相对于我们传统的Adapter,减少了接近60行代码。

三、够简单了么?还可以更简单!

我们还可以在ViewHolder中为TextView专门设计设置文字的方法,为ImageView专门设计设置图片的方法等等

这样我们使用的时候只需要这样就可以成功写出Adapter了。

可以发现,代码量减少了非常非常多。


Android Developer in GDUT