記自己常用依賴庫系列:萬能適配器

萬能適配器,鴻洋大神出品:
引入
ForRecyclerView

compile 'com.zhy:base-rvadapter:3.0.3'
ForListView

compile 'com.zhy:base-adapter:3.0.3'
使用方法:
mRecyclerView.setAdapter(new CommonAdapter<String>(this, R.layout.item_list, mDatas)
{
    @Override
    public void convert(ViewHolder holder, String s)
    {
        holder.setText(R.id.id_item_list_title, s);
    }
});

是不是相當(dāng)方便,在convert方法中完成數(shù)據(jù)、事件綁定即可。
只需要簡單的將Adapter繼承CommonAdapter,復(fù)寫convert方法即可。省去了自己編寫ViewHolder等大量的重復(fù)的代碼。

多布局的情況下:
MultiItemTypeAdapter adapter = new MultiItemTypeAdapter(this,mDatas);
adapter.addItemViewDelegate(new MsgSendItemDelagate());
adapter.addItemViewDelegate(new MsgComingItemDelagate());
  
  //假裝獲取數(shù)據(jù)類型不同
    private void getDatas() {
        List<Object> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            ManEntity manEntity = new ManEntity();
            UserEntity userEntity = new UserEntity();
            userEntity.setNickName(i+"我的");
            manEntity.setDrawable(R.mipmap.de);
            manEntity.setNum(i);
            manEntity.setStr("出茨木"+i);
            list.add(manEntity);
            list.add(userEntity);
        }
        this.lists = list;

    }
每種Item類型對應(yīng)一個(gè)ItemViewDelegete,例如:

public class MsggotoItemDelagate implements ItemViewDelegate<Object> {
    
    @Override
    public int getItemViewLayoutId() {
        return R.layout.recycle_item2;
    }

    @Override
    public boolean isForViewType(Object item, int position) {
        return item instanceof UserEntity;
    }

    @Override
    public void convert(ViewHolder holder, Object objects, int position) {
        holder.setText(R.id.tv,((UserEntity)objects).getNickName());
    }
}
添加HeaderView、FooterView:
mHeaderAndFooterWrapper = new HeaderAndFooterWrapper(mAdapter);

TextView t1 = new TextView(this);
t1.setText("Header 1");
TextView t2 = new TextView(this);
t2.setText("Header 2");
mHeaderAndFooterWrapper.addHeaderView(t1);
mHeaderAndFooterWrapper.addHeaderView(t2);

mRecyclerView.setAdapter(mHeaderAndFooterWrapper);
mHeaderAndFooterWrapper.notifyDataSetChanged();
類似裝飾者模式,直接將原本的adapter傳入,初始化一個(gè)HeaderAndFooterWrapper對象,然后調(diào)用相關(guān)API添加。
添加LoadMore:
mLoadMoreWrapper = new LoadMoreWrapper(mOriginAdapter);
mLoadMoreWrapper.setLoadMoreView(R.layout.default_loading);
mLoadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener()
{
    @Override
    public void onLoadMoreRequested()
    {
    }
});

mRecyclerView.setAdapter(mLoadMoreWrapper);

直接將原本的adapter傳入,初始化一個(gè)LoadMoreWrapper對象,然后調(diào)用相關(guān)API即可。
添加EmptyView:
mEmptyWrapper = new EmptyWrapper(mAdapter);
mEmptyWrapper.setEmptyView(R.layout.empty_view);

mRecyclerView.setAdapter(mEmptyWrapper );

直接將原本的adapter傳入,初始化一個(gè)EmptyWrapper對象,然后調(diào)用相關(guān)API即可。

支持鏈?zhǔn)教砑佣喾N功能,示例代碼:

mAdapter = new EmptyViewWrapper(
    new LoadMoreWrapper(
    new HeaderAndFooterWrapper(mOriginAdapter)));

附上此適配器Github鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容