Android 关于brvah中通用RecyclerView.A
前言
写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高度不变形。