【FastDev4Android框架开发】BaseAdapterHelper的基本使用介绍,让你摆脱狂写一堆Adapter烦恼(二十四)

jerry Android 2015年11月26日 收藏

().前言:   

        项目开发中对于列表(listview)和表格(girdview)中的数据显示,我们就需要写自定义的Adapter。所以一般一个项目下来少得十几个Adapter,多的二十几个甚至更多。但是Adapter的处理一般就是传入数据,view模板,getView,之类的在加入一些控制显示之类的代码。虽然写起来难度不大,但是很多类似的代码经常需要狂写,简直会有想吐的赶脚吧~。今天为大家介绍一款快速Adapter的框架,只需要创建QuickAdapter,传入布局,数据,然后绑定控件以及显示的数据即可。这样一讲是不是赶脚非常方便了,OK我们赶紧行动吧~

        Base-Adapter-Helper(Github地址)

        FastDev4Android框架项目地址:https://github.com/jiangqqlmj/FastDev4Android

().基本介绍:   

         2.1:BaseAdapterHelperBaseAdapter ViewHolder模板的抽象,让我们更快的写出Adapter来绑定数据显示。官网给出的使用实例和实现效果如下:

         

         下载该项目下来,整个项目一共四个类文件:

  • BaseAdapterHelper 可以使得BaseAdaptergetView()方法更加简单的使用。摆脱ViewHolder模板的写法
  • QuickAdapter  该类可以让我们自定义的BaseAdapter类的代码大量的缩减,让我们把精力集中在业务实现上面。我们只需要做的是绑定控件view和数据model即可。
  • EnhancedQuickAdapter  增强的QuickAdapter,主要是用于绑定控件view和数据model
  • BaseQuickAdapter  QuickAdapter的高层类封装,实现BaseAdapter中抽象方法,同时对于data数据的操作以及其他操作

2.2.AndroidStudio引入Base-Adapter-Helper库,一种方式最简单了直接使用以下方式依赖:


  1. compile'com.joanzapata.android:base-adapter-helper:1.1.11'

我这边采用的是第二种方式:因为该库只有四个类,所以我就把这个类直接复制进入去了,如下:


不过直接这样还行,因为该项目中setImageUrl()方法中图片异步加载采用的是Picasso框架,所以要么你

修改该框架,要么你就可以以下方式引入该框架:


  1.   compile 'com.squareup.picasso:picasso:2.5.2'

         2.3.BaseAdapterHelper中的方法介绍:

  • 对于任何TextView:setText()调用setText(String)
  • 对于任何View:setAlpha()调用setAlpha(float)
  • 对于任何View:setVisiable()调用setVisibility(int)
  • 对于任何TextView:linkify()调用Linkify.addLinks(view,ALL)
  • 对于任何TextView:setTypeface()调用setTypeface(Typeface)
  • 对于任何ProgressBar:setProgress()调用setProgress(int)
  • 对于任何ProgressBar:setMax()调用setMax(int)
  • 对于任何RatingBar:setRating()调用setRating(int)
  • 对于任何ImageView:setImageResource()调用setImageResource(int)
  • 对于任何ImageView:setImageDrawable()调用setImageDrawable(Drawable)
  • 对于任何ImageVIew:setImageBitmap()调用setImageBitmap(bitmap)
  • 使用setImageUrl()会使用Picasso框架来进行下载图片然后现在ImageView
  • 使用seImageBuilder()会使用Picasso的图片请求构建器
  • setOnClickListener()
  • setOnTouchListener()
  • setOnLongClickListener()
  • setTag()
  • setChecked()
  • setAdapter()

2.4.我们可以使用showIndeterminateProgress(boolean)可以控制列表底下显示进度。如下:


().使用实例:  

        有了以上对于框架的基本介绍和引入之后,现在我们可以来具体实现一个例子了,其实用法很简单:

  • 准备数据(和以往一样)
  • 创建适配器(创建适配器并且绑定数据和相关布局控件,model即可)--这边就不需要重写一个自定义的适配器了。
  • Listview绑定适配器(和以往一样)

 

3.1.准备数据:ModuleBeanDataUtil


  1. packagecom.chinaztt.fda.entity;
  2. /**
  3.  *当前类注释:列表数据测试数据实体类
  4.  *项目名:FastDev4Android
  5.  *包名:com.chinaztt.fda.entity
  6.  *作者:江清清 on 15/11/8 17:56
  7.  *邮箱:jiangqqlmj@163.com
  8.  *QQ: 781931404
  9.  * 公司:江苏中天科技软件技术有限公司
  10.  */
  11. publicclass ModuleBean {
  12.     private String modulename;
  13.     private String imgurl;
  14.     private String description;
  15.  
  16.     public ModuleBean() {
  17.     }
  18.  
  19.     public ModuleBean(String modulename, Stringimgurl, String description) {
  20.         this.modulename = modulename;
  21.         this.imgurl = imgurl;
  22.         this.description = description;
  23.     }
  24.  
  25.     public String getModulename() {
  26.         return modulename;
  27.     }
  28.  
  29.     public void setModulename(Stringmodulename) {
  30.         this.modulename = modulename;
  31.     }
  32.  
  33.     public String getImgurl() {
  34.         return imgurl;
  35.     }
  36.  
  37.     public void setImgurl(String imgurl) {
  38.         this.imgurl = imgurl;
  39.     }
  40.  
  41.     public String getDescription() {
  42.         return description;
  43.     }
  44.  
  45.     public void setDescription(Stringdescription) {
  46.         this.description = description;
  47.     }
  48.  
  49.     @Override
  50.     public String toString() {
  51.         return "ModuleBean{" +
  52.                 "modulename='" +modulename + '\'' +
  53.                 ", imgurl='" + imgurl+ '\'' +
  54.                 ", description='" +description + '\'' +
  55.                 '}';
  56.     }
  57. }
  1. packagecom.chinaztt.fda.test;
  2.  
  3. importcom.chinaztt.fda.entity.ModuleBean;
  4.  
  5. importjava.util.ArrayList;
  6. importjava.util.List;
  7.  
  8. /**
  9.  *当前类注释:
  10.  *项目名:FastDev4Android
  11.  *包名:com.chinaztt.fda.test
  12.  *作者:江清清 on 15/11/8 17:53
  13.  *邮箱:jiangqqlmj@163.com
  14.  *QQ: 781931404
  15.  * 公司:江苏中天科技软件技术有限公司
  16.  */
  17. publicclass DataUtils {
  18.     /**
  19.      * 进行构造相关数据
  20.      * @return
  21.      */
  22.     public static List<ModuleBean>getAdapterData(){
  23.         List<ModuleBean> moduleBeans=newArrayList<ModuleBean>();
  24.         ModuleBean moduleBean=new ModuleBean();
  25.        moduleBean.setModulename("完美“价”给你");
  26.        moduleBean.setImgurl("http://interface.zttmall.com/Images/upload/image/20150325/20150325083110_0898.jpg");
  27.        moduleBean.setDescription("标题1的简要说明");
  28.         moduleBeans.add(moduleBean);
  29.  
  30.         moduleBean=new ModuleBean();
  31.        moduleBean.setModulename("探路者,旅行记");
  32.        moduleBean.setImgurl("http://interface.zttmall.com/Images/upload/image/20150325/20150325083214_8280.jpg");
  33.        moduleBean.setDescription("标题2的简要说明");
  34.         moduleBeans.add(moduleBean);
  35.  
  36.         moduleBean=new ModuleBean();
  37.        moduleBean.setModulename("进口商品,彻底放价");
  38.        moduleBean.setImgurl("http://interface.zttmall.com/Images/upload/image/20150328/20150328105404_2392.jpg");
  39.        moduleBean.setDescription("标题3的简要说明");
  40.         moduleBeans.add(moduleBean);
  41.  
  42.         moduleBean=new ModuleBean();
  43.        moduleBean.setModulename("鲜果季");
  44.        moduleBean.setImgurl("http://interface.zttmall.com/Images/upload/image/20150325/20150325083611_0644.jpg");
  45.        moduleBean.setDescription("标题4的简要说明");
  46.         moduleBeans.add(moduleBean);
  47.  
  48.         moduleBean=new ModuleBean();
  49.        moduleBean.setModulename("盼盼 法式小面包");
  50.        moduleBean.setImgurl("http://interface.zttmall.com/Images/upload/image/20150312/20150312100454_8837.jpg");
  51.        moduleBean.setDescription("标题5的简要说明");
  52.         moduleBeans.add(moduleBean);
  53.  
  54.         moduleBean=new ModuleBean();
  55.        moduleBean.setModulename("雀巢 脆脆鲨 威化 480g/盒");
  56.        moduleBean.setImgurl("http://interface.zttmall.com/Images/upload/image/20150312/20150312100617_0693.jpg");
  57.        moduleBean.setDescription("标题6的简要说明");
  58.         moduleBeans.add(moduleBean);
  59.  
  60.         moduleBean=new ModuleBean();
  61.        moduleBean.setModulename("主题馆1");
  62.        moduleBean.setImgurl("http://interface.zttmall.com/Images/upload/image/20150129/20150129163540_6179.jpg");
  63.        moduleBean.setDescription("标题7的简要说明");
  64.         moduleBeans.add(moduleBean);
  65.  
  66.         moduleBean=new ModuleBean();
  67.        moduleBean.setModulename("主题馆2");
  68.        moduleBean.setImgurl("http://interface.zttmall.com/Images/upload/image/20150129/20150129163615_1774.jpg");
  69.        moduleBean.setDescription("标题8的简要说明");
  70.         moduleBeans.add(moduleBean);
  71.  
  72.         moduleBean=new ModuleBean();
  73.        moduleBean.setModulename("主题馆3");
  74.        moduleBean.setImgurl("http://interface.zttmall.com/Images/upload/image/20150129/20150129163635_1130.jpg");
  75.        moduleBean.setDescription("标题9的简要说明");
  76.         moduleBeans.add(moduleBean);
  77.  
  78.         moduleBean=new ModuleBean();
  79.        moduleBean.setModulename("主题馆4");
  80.        moduleBean.setImgurl("http://interface.zttmall.com/Images/upload/image/20150129/20150129163840_0270.jpg");
  81.        moduleBean.setDescription("标题10的简要说明");
  82.         moduleBeans.add(moduleBean);
  83.  
  84.         moduleBean=new ModuleBean();
  85.        moduleBean.setModulename("主题馆5");
  86.        moduleBean.setImgurl("http://interface.zttmall.com/Images/upload/image/20150129/20150129163849_4099.jpg");
  87.        moduleBean.setDescription("标题11的简要说明");
  88.         moduleBeans.add(moduleBean);
  89.         return moduleBeans;
  90.     }
  91. }


3.2.创建适配器(绑定数据,控件相关)和绑定适配器


  1. packagecom.chinaztt.fda.test;
  2.  
  3. importandroid.os.Bundle;
  4. importandroid.widget.ListView;
  5.  
  6. importcom.chinaztt.fda.adapter.base.BaseAdapterHelper;
  7. importcom.chinaztt.fda.adapter.base.QuickAdapter;
  8. importcom.chinaztt.fda.entity.ModuleBean;
  9. importcom.chinaztt.fda.ui.R;
  10. importcom.chinaztt.fda.ui.base.BaseActivity;
  11. importorg.androidannotations.annotations.AfterViews;
  12. importorg.androidannotations.annotations.EActivity;
  13. importorg.androidannotations.annotations.ViewById;
  14.  
  15. importjava.util.List;
  16.  
  17. /**
  18.  *当前类注释:baseAdapterhelper 使用实例
  19.  *项目名:FastDev4Android
  20.  *包名:com.chinaztt.fda.test
  21.  *作者:江清清 on 15/11/8 17:39
  22.  *邮箱:jiangqqlmj@163.com
  23.  *QQ: 781931404
  24.  * 公司:江苏中天科技软件技术有限公司
  25.  */
  26. @EActivity(R.layout.base_adapter_test_layout)
  27. publicclass BaseAdapterTestActivity extends BaseActivity {
  28.     @ViewById
  29.     ListView lv_base_adapter;
  30.     private QuickAdapter<ModuleBean>mAdapter;
  31.     private List<ModuleBean> moduleBeans;
  32.     @Override
  33.     protected void onCreate(BundlesavedInstanceState) {
  34.         super.onCreate(savedInstanceState);
  35.     }
  36.     @AfterViews
  37.     public void bindLvData(){
  38.         moduleBeans=DataUtils.getAdapterData();
  39.         if(mAdapter==null) {
  40.             mAdapter = newQuickAdapter<ModuleBean>(this, R.layout.lv_item_base_layout,moduleBeans){
  41.                 @Override
  42.                 protected voidconvert(BaseAdapterHelper helper, ModuleBean item) {
  43.                    mAdapter.showIndeterminateProgress(true);
  44.                    helper.setText(R.id.text_lv_item_title, item.getModulename())
  45.                            .setText(R.id.text_lv_item_description, item.getDescription())
  46.                            .setImageUrl(R.id.img_lv_item, item.getImgurl());
  47.                 }
  48.             };
  49.            lv_base_adapter.setAdapter(mAdapter);
  50.         }
  51.     }
  52. }


3.3.运行效果如下


  好了到此Base-Adapter-Helper的基本介绍和基本使用已经讲完了,相信大家已经会初步使用了,下一

篇我们对于源代码的实现做一个分析和扩展进阶使用做讲解。具体全部代码已经上传到FastDev4Android项目中了。同时欢迎大家去Github站点进行clone或者下载浏览:

https://github.com/jiangqqlmj/FastDev4Android 同时欢迎大家starfork整个开源快速开发框架项目~