安卓开发开源框架-AndroidAnnotations(五)
做app开发列表是我们经常见到的表现形式,因为手机一般查看数据都是一行一行的向下滑动查看数据,不像pc上表格可以有多列,手机上只有一列,Android开发里都是用listview开发。
listview都会和adapter(适配器)去配合,Google开发系统时和聪明的用到了java设计模式中的适配器模式,目的当然是实现数据和表现分离,从此达到解耦。Google就是牛,佩服,敬仰。
本文是要基于AndroidAnnotations框架讲adapter,为了理解和原生的不同之处,先大概的讲下原生的adapter的写法。
首先,你得继承个adapter,在getview方法里infalte个item布局,然后构造viewholder,里面是子项里的控件,通过findviewbyid实现,其次通过listview那边获取数据传到adapter,最后viewholder根据值去设置控件的实现。
大概的说了下,没有开发经验的人时听不懂的,呵呵。懂的话你就会发现这种写法的繁琐之处也在findviewbyid,然后这正是AndroidAnnotations依赖注入最能解决的地方。那么如何写呢,下面就通过一个例子分解了解下吧。
1、对于一个完整的东西我们都是先从小方面入手,找突破口;对于list数据的现实,当然要从列表里的子项入手,先写子项的布局list_item.xml。
2、创建itemview控件,并实现和list_item绑定,相当于完成了viewholder的工作。这里就需要用到@EViewGroup,用来绑定布局文件,一般ItemView继承LinearLayout控件即可,毕竟ItemView就是个组合控件。然后用@ViewById代替findviewbyid方式实例控件,然后ItemView上的控件现实数据的做法一般是自己写个init方式去实现,不要用构造方法,因为那里面没办法得到数据。还有@ViewById的控件不能写成private,否则编译不能通过。data类就是个数据的模型类,暴露出个get set方法。
3、创建adapter,一般是用基于BaseAdapter的,因为它的约束小,自由、限制小。
首先,MyAdapter前要加上@EBean,正面这是个bean,然后要继承它的抽象方法,都是一个套路基本不变,代码写到这里,要编译一下了,因为itemview的生成是依赖于ItemView_的,而它是依赖注入的产物,在编译后才会生成后加_的文件,注意ItemView不是用过new实例化生成的,而是通过build的方式,很巧妙。生成的ItemView要实现数据关联就得调用之前已经定义好的init方式,并把此项的数据传进去,通过getItem很巧妙,避免写list.get(position)的啰嗦。然后列表数据的来源一般也是放在Adapter里,然后去调,记得要notifyDataSetChanged,去通知,这里用到的就是观察者模式,在此重申Google很厉害。
4、现在就可以做listview绑定Adapter了,像Activity和它的布局这里就不讲了,很简单。这里主要说绑定,通过@Bean得到实例,就可以在后面做listView.setAdapter(adapter);绑定了。最后别忘记传数据过去。
至此,把Adapter的写法分4个步骤实现了下,运行就会得到一上来看到的效果图的效果。
如果觉得这篇文章帮助到了你请赞一下或者分享给有需要的人,您的评价是我前进的方向。我相信分享精神。我是Faith,我相信。新注册了微信公众账号(manongsuibi),欢迎加关注,内容的话,可能是技术,可能是思想,可能是工作感悟,只是希望把自己的认识传播出去,从而寻找些同频的人,共同学习交流,做码农一个人太孤单。。。