天天看点

RecyclerView.Adapter的优化与封装

项目结构图
RecyclerView.Adapter的优化与封装

主要是对baserecycleadapter和baseviewholder进行封装。

好了,开始讲课了^_^。

baserecycleadapter.class

baserecycleadapter类里面其实没什么,就和普通的adapter没什么区别,只是将数据的设置用抽象方法去表示,然后让继承类去实现结果操作。

看到上面的代码,大家应该看到了两个重点:

一、单击事件的回调:

recyclerview默认是没有像listview的onitemclick方法的,我们必须得自己去实现,我是直接给引用 的布局设置点击事件和长点击事件,这个点击事件最好是设置在oncreateviewholder方法中,因为recycleradapter初始化只调用一次,而有些人习惯设置在onbindviewholder方法中,这样每次更新view都要去设置一遍监听事件,是没有必要的操作。大家看到我在两个事件的回调里面设置了一个clickflag单击标记,大家知道是为了避免什么吗?操作实验过的同学应该就会知道了,假如不设置这些标志,在进行长点击操作松开手指会发现,他还会再触发一次短单击事件,所以为了避免长点击操作带来的两次回调效果,先设置clickflag为true,此时可以短点击,当长单击操作开始时,我们设置clickflag为false,这是长单击回调结束,进入了短单击,发现此时clickflag是为false的,所以就不回调短单击的事件,最后又重新设置回可短单击效果,这部分要是不明白的可以给我留言。

二、数据传递用泛型

①list< ? extends basebean> data

② protected abstract void convert(baseviewholder holder, t bean);

这两个部分都是泛型的巧用,以前不会玩这些,java打的不牢,后来看鸿洋的博客,对于封装这块用的特别多,忽然发现泛型的重要性,然后重回宿舍,拿起李刚的《疯狂java讲义》狂看,看完之后,原来是这样的啊,? extends basebean表现为集合数据里面存储的类型是basebean或是basebean的子类,也就是向下,如果是? super basebean 则存储的数据类型为basebean或basebean的父类,也就是向上,大概好像是这么理解的,如有错误,大家指出来喔,

我这边存储的数据类型model,bean都必须要继承basebean这个父类,因为泛型传递,所以我就这么做了,要是大家有什么好的方法的话,也可以告诉告诉我,就怕没有知识汲取。

basebean.class 和person.class
RecyclerView.Adapter的优化与封装
baseviewholder.class

baseviewholder这个类呢一般都是拿来优化recycleview的,然后拿到这个holder来设置数据,recycleadapter的oncreateviewholder方法将填充的item布局返回给了baseviewholder,然后将这个view设置为全局,下面的那些settext或是setimageresource等等,大家都可以自己扩展,这些方法都是提供设置view数据的。

好了,base封装基本上完成了,接下来就是怎么用了。

recycleadaptertest.class

最后就是泛型的强转,然后下面调用viewholder的设置数据,将资源id和数据传递过去,就设置好了。

哇塞,adapter这么少的啊,真的好爽,我都佩服自己了。

主mainactivity设置adapter就和普通设置数据一样一样的啦,基本没什么变化。

mainactivity.class

item布局就是一个textview,就没有什么了。

效果图
RecyclerView.Adapter的优化与封装

实力装了一次,以前看别人写这些代码,感觉好高大上啊,其实真的没有什么啊=_=,自己动手,丰衣足食。暑期以来第一篇,之前忙着看 安卓优化方面的书,等看完了,有了自己的心得,再来写一篇优化类的博文吧!!搞定!!

继续阅读