天天看點

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());
           
要說的差不多就是這樣。
           

項目連結