美文网首页第三方扩展
Android 关于brvah中通用RecyclerView.A

Android 关于brvah中通用RecyclerView.A

作者: 夏_Leon | 来源:发表于2018-08-01 17:14 被阅读0次

    前言

    写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高度不变形。

    相关文章

      网友评论

        本文标题:Android 关于brvah中通用RecyclerView.A

        本文链接:https://www.haomeiwen.com/subject/orjrvftx.html