天天看点

RecyclerView之BaseRecyclerViewAdapterHelper(一)

今天要说的是BaseRecyclerViewAdapterHelper这个开源框架,谷歌推出RecyclerView之后,越来越多的人发现RecyclerView并没有想象之中那么好用,功能虽然强大,但是每个方法都要回调,非常的麻烦;并且,RecyclerView的adapter写起来非常麻烦。之前我也写过一篇关于RecyclerView的文章。今天要说的是BaseRecyclerViewAdapterHelper他的底层实现就是RecyclerView的adapter。但是,这个开源框架把用到的东西都封装好了,写起来非常方便。
    首先添加依赖,这个框架需要添加的有两个东西:首先在 build.gradle(Project:XXXX) 的 repositories 添加:
           
allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }
           
其次
           
dependencies {
            compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:VERSION_CODE'
    }
           
用这里的真实发行版本号, 替换 VERSION_CODE。注意,两个都要添加,不然无法加载成功。
    当这个开源框架的依赖添加完成之后,你还要添加RecyclerView的依赖,包名android.support.v7.widget.RecyclerView。怎么在线添加依赖自己百度,或者我前一篇轮播图的文章里面步骤写的很清楚,自己去看一下就知道了。
    至此,依赖就全部搞完了,正文开始了,首先都是一样的在onCreate方法里面先找到控件,设置布局管理器,设置adapter,初始化数据。代码如下:
           
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        RecyclerView recycleView = (RecyclerView) findViewById(R.id.recyclerView);
        BaseRecyclerViewAdapter adapter = new BaseRecyclerViewAdapter(R.layout.layout_recycler_adapter,mDatas);
        recycleView.setLayoutManager(new LinearLayoutManager(this));
        recycleView.setAdapter(adapter);
    }
    private void initData() {
        context = this;
        mDatas = new ArrayList<ShuJu>();
        for ( int i=; i < ; i++) {
            ShuJu mShuJu = new ShuJu(i+"");
            mDatas.add(mShuJu);
        }
    }
           
再就是最重要的adapter的写法了,其实很简单,写一个adapter继承BaseQuickAdapter<k,v>即可,这个是最简单的一个也是很常用的。这里是两个泛型,一个是你的数据类型,一个是BaseViewHolder。adapter代码如下:
           
public class BaseRecyclerViewAdapter extends BaseQuickAdapter<ShuJu,BaseViewHolder> {

    public BaseRecyclerViewAdapter(int layoutResId, List<ShuJu> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, ShuJu item) {
        helper.setText(R.id.tv,item.getTitle())
    }
}
           
是不是很简单?首先,构造方法的第一个参数就是我们所需要的item布局id,在我们Activity里面初始化的时候传,后面那个,就是我们所需要的数据的类型,list集合的形式传递的。相信大家都用过,我这个类里面就一个字符串title,然后构造方法,get方法。其次就是convert,数据就是在这里面设置的,有童鞋肯定会问到,他传过来的是一个list集合,在实际项目里面每一个对象都有很多条数据,我们之前都是这样写的,先list.get(position),然后用这个获取到的对象去设置,比方说,我这里按照以前的写法就是list.get(i).getTitle(),这样去设置数据,这里为什么这么简单呢?直接item.getTitle()就行了,就是因为,这个框架把list.get(i)这一步,替我们做了,我们只用设置数据就可以了。
    对了,我这里还用到了一个框架,画分隔线的框架com.yqritc:recyclerview-flexibledivider,用法百度一下就知道了,这里就说最简单的,代码如下:
           
mRecyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this)
                .color(Color.RED)
                .build());
           
要说的差不多就是这样。
           

项目链接