BaseRecyclerViewAdapterHelper
BaseRecyclerViewAdapterHelper copied to clipboard
BRVAH技术交流群
技术交流群可以加我微信(chad_cym)备注:技术交流,拉你入群
判断手机屏幕当前显示的是哪一条item或者哪条item占的比重最大。很多用来列表播放视频的,都能用到,就像微博视频一样,滑到哪个item,播放哪一个视频。
[多布局之间拖动 #2692] (https://github.com/CymChad/BaseRecyclerViewAdapterHelper/issues/2692)
目前section有header,建议加个footer
mvvm+databinding开发架构什么时候支持
能不能为BaseItemProvider提供构造ViewHolder时的回调事件 现在的BaseItemProvider并不能完全的做到业务独立 例如我以往可以在ViewHolder的构造方法里一次性的为TextView添加TextWatcher 现在只能在ItemProvider的convert方法里创建TextWatcher并付值为ItemProvider的成员变量 然后addTextWatcher之前检测成员mTextWachter是否为空 如果不为就先执行removeTextChangedListener方法然后再创建一个新的TextWahter成员去付值 有点恶心...希望作者可以改进一下
多选、支持纯view创建方式的item
最近在做香港相关的项目,因此要适配繁体中文,楼主能不能string.xml做个多语言。
希望能兼容PagedListAdapter
BaseMultiItemQuickAdapter
新增函数用来删除指定 Item 的 subItem 。
传一个SparseArray的数据类型 而不是 list
希望adapter可以返回onBindViewHolder中的List<Object> payloads参数,用来实现item中某个控件的刷新
希望adapter可以返回onBindViewHolder中的List payloads参数,用来实现item中某个控件的刷新
最新版本 v2.9.47 已经加入了 DiffUtil 做局部刷新,具体使用方式参考 DiffUtilActivity
RecyclerView添加搜索过滤器,这个功能很有必要
正常的RecyclerView设置setEnptyView之后能正常显示,但是如果是这个RecyclerView设置了HeaderView之后,因为监听的是列表数据的变化,就会出现头部数据变化了之后,调用notifyDataSetChanged更改数据时无反应。
@Onperson 头部数据数据变化后,headeriview的数据变化需要自己手动更新,因为adapter的headerview的数据绑定没有走adapter的convert方法
正常的RecyclerView设置setEnptyView之后能正常显示,但是如果是这个RecyclerView设置了HeaderView之后,因为监听的是列表数据的变化,就会出现头部数据变化了之后,调用notifyDataSetChanged更改数据时无反应。
headView 可以单独用一个 viewBinder 管理。
支持下butterKnife
支持下butterKnife
没懂,可以详细说一下吗?~
允许使用ButterKnife在adapter里面进行控件view的初始化 @BindView(R.id.title) TextView name; @BindView(R.id.job_title) TextView jobTitle;
允许使用ButterKnife在adapter里面进行控件view的初始化 @BindView(R.id.title) TextView name; @BindView(R.id.job_title) TextView jobTitle; 哦哦 ,大概懂了。其实已经算支持了,你的业务代码写在哪里的? 如果是 xxHolder 来继承 BaseViewHolder 。里面写业务代码。如果这么做的话,在构造器里就可以 ButterKnife.bind(this, view); 。
允许使用ButterKnife在adapter里面进行控件view的初始化 @BindView(R.id.title) TextView name; @BindView(R.id.job_title) TextView jobTitle;
@Brainbg 不需要 Adapter 提供支持。 ButterKnife 可以绑定 View 到任意对象,只要自定义 ViewHolder 就行了:
class MyViewHolder extends BaseViewHolder {
@BindView(R.id.tv)
TextView tv;
public MyViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
温馨提示: BaseViewHolder 已经提供了几乎所有常用的 View 操作,如 setText(viewId, text)
setImageResource(viewId, resId)
getView(viewId)
,并且会自动缓存,没必要使用 ButterKnife。
希望修改 分页数据不占满一屏,会自动加载更多的问题。只加载第一页的数据,不要自动加载第二页,第三页...的数据。
希望修改分页数据不占满一屏,会自动加载更多的问题。只加载第一页的数据,不要自动加载第二页,第三页...的数据。
你在调用setNewData之后 ,调用disableLoadMoreIfNotFullPage()方法,不满一页的时候,就不会自动加载第二第三页的数据了。
https://github.com/luizgrp/SectionedRecyclerViewAdapter 参考一下这个库,里面的思想很有意思,不局限于将数据格式化(继承相同的MultiItemEntity),每一个section可以设置不同的数据,展示不同的界面样式。而且我发现使用BRVAH会有一些局限性,类似于朋友圈评论的查看全部这种就不太好实现,还有目录结构的列表时,item样式只能相似的才可以用,样式差异大的时候,像ItemDecoration就没办法使用了,还有当顶层目录像cardview那种样式,展开的时候还要保持下级目录也在cardview那里面,就不好实现了
支持右滑的recycleview吗
支持右滑的recycleview吗
这个只是一个适配器,和你的 RecycleView 怎么滑动没关系的。
SpanSizeLookup
的处理不合理。
BaseQuickAdapter#onAttachedToRecyclerView()
函数中给 manager 设置了 SpanSizeLookup
,导致在 setAdapter()
之前 manager.setSpanSizeLookup()
的值被覆盖导致无效。
目前的错误的写法:
gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
...
if (mSpanSizeLookup == null) {
return isFixedViewType(type) ? gridManager.getSpanCount() : 1;
} else {
return (isFixedViewType(type)) ? gridManager.getSpanCount() : mSpanSizeLookup.getSpanSize(gridManager, position - getHeaderLayoutCount());
}
}
}
正确的写法:
// 记录默认的 SpanSizeLookup
final GridLayoutManager.SpanSizeLookup defSpanSizeLookup = gridManager.getSpanSizeLookup();
// 设置新的 SpanSizeLookup 作为代理
gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
...
if (mSpanSizeLookup == null) {
// adapter 不处理的时候,需要使用默认的 SpanSizeLookup 处理,而不是直接返回 1 。
return isFixedViewType(type) ? gridManager.getSpanCount() : defSpanSizeLookup.getSpanSize(position);
} else {
// 需要使用设置到 adapter 的 SpanSizeLookup 处理。
// position 参数需要与默认的 SpanSizeLookup 保持一致,不应该减去头部数量。
return (isFixedViewType(type)) ? gridManager.getSpanCount() : mSpanSizeLookup.getSpanSize(gridManager, position);
}
}
});
支持SortedList
由于 [添加多个HeaderView,最终会被合成一个item ]https://github.com/CymChad/BaseRecyclerViewAdapterHelper/issues/950 ; 现在有这样一个需求: 我添加了三个HeaderView,然后我滑动时获取firstVisibleItemPosition,判断当滑动到第二个HeaderView位置时,显示其他view。 然而我是获取不到第二个HeaderView位置的,因为在HeaderView范围时一直返回的是0(被合成一个item)。我只能通过偏移量或其他方式获取对应HeaderView显示的位置,当HeaderView过多时没有直接获取HeaderView的item位置来的方便。
setBackgroundColor() setTextColor() 现在好像支持 @ColorInt 类型的值,希望可以支持@ColorRes,这样做一些颜色的设置更灵活和方便,适用更广泛!