第三方扩展

Android 关于brvah中通用RecyclerView.A

2018-08-01  本文已影响0人  夏_Leon

前言

写Adapter应该是所有Android开发者最常见的事,而这些adapter中有大量重复代码,有没有什么办法可以让写adapter变得简单方便呢。比如封装下?一般来说你能想到的,大神们都已经做好了,直接查找比较常用的BaseAdapter:
1、鸿洋的“为RecyclerView打造通用Adapter 让RecyclerView更加好用”
2、BRVAH官方使用指南

试用比较

二者的代码量都很少,可以设置EmptyView、Header、Footer,写法也很相似,主要逻辑都在重写的convert()方法里,快速完成布局。包括数据的加载方法setText()等都一样。
但是鸿洋的BaseAdapter上次更新是两年前了,应该停止维护了。而brvah最新更新在几个月前,还在持续维护中。当然最重要的还是brvah星星多,所以简单试用后选择brvah。

集成使用

按上述官方指南加载使用
在build.gradle(root)中

allprojects {
    repositories {
        jcenter()
        google()
        maven { url "https://jitpack.io" }
    }
}

在build.gradle(app)中

compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.40'

简单的自定义Adapter并使用

public class InviteAdapter extends BaseQuickAdapter<Invite, BaseViewHolder> {

    public InviteAdapter(List<Invite> inviteList) {
        super(R.layout.invite_list_item, inviteList);
    }

    //主要布局调整都在重写的这个方法里
    @Override
    protected void convert(BaseViewHolder viewHolder, Invite data) {
        viewHolder.setText(R.id.tv_phone, data.getUserName())
                .setVisible(R.id.tv_status, data.getStatus() == 2)
                .setVisible(R.id.tv_accept, data.getStatus() == 0)
                .setVisible(R.id.tv_refuse, data.getStatus() == 0);
        viewHolder.getView(R.id.iv));
    }
}

在Activity中

        mData = new ArrayList<>();
        mAdapter=new InviteAdapter(mData);
        mRecycleView.setAdapter(mAdapter);
        mRecycleView.setLayoutManager(new LinearLayoutManager(this));
        mAdapter.setEmptyView(R.layout.invite_empty_layout,mRecycleView);

一些坑

尽管官方已经有一些文档了,但是使用还是比较模糊的,自己慢慢排坑

1、设置空布局setEmptyView()的时候报错 “please bind recyclerView first!”,要先把adapter绑定到RecycleView。

        mAdapter.bindToRecyclerView(mRecycleView);
        mAdapter.setEmptyView(R.layout.invite_empty_layout);

新版已经摒弃这种写法,改为

        mAdapter.setEmptyView(R.layout.invite_empty_layout,mRecycleView);

2、添加header、footer,在adapter构造方法中

        View footer= LayoutInflater.from(mContext).inflate(R.layout.footer,null);
        addFooterView(footer);

简单的两句话就行,然而我添加footer发现高度变形,

原来在footer.xml中,直接在根布局指定layout_height="200dp",发现并没有生效,添加到footer后,变为wrap_content效果,
后改为根布局wrap_content,在里面内嵌一个constraintLayout,指定高度200dp,才保证了footer高度不变形。

上一篇下一篇

猜你喜欢

热点阅读