原创首发
通过EditAdapter为你的RecyclerView快速集成编辑模式

最近项目有个需求,需要在收藏列表增加编辑模式,包括全选、删除、长按进入编辑模式等,于是对
Adapter
进行了一下封装,并开源出来,一起交流学习
演示
添加EditAdapter
到你的项目
- 在项目的
build.gradle
中添加:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
//TAG替换为上方的最新版本号
dependencies {
implementation 'com.github.plain-dev:EditAdapter:vTAG'
}
如何使用
- 在你的数据实体类中继承
SelectedBean
public class MyDataBean extends SelectedBean {
private String title;
private String content;
public MyDataBean(String title, String content) {
this.title = title;
this.content = content;
}
......
}
- 创建一个适配器,继承自
EditAdapter<T extends ISelected>
public class MyEditAdapter extends EditAdapter<MyDataBean> {
......
}
- 在构造方法中指定数据和布局
public MyEditAdapter(List<MyDataBean> list) {
super(list, R.layout.item_edit,R.layout.item_empty);
}
- 创建数据视图和空数据视图
@Override
protected BaseEditViewHolder createViewHolder(View itemView) {
return new MyViewHolder(itemView);
}
@Override
protected BaseEditViewHolder createEmptyViewHolder(View itemView) {
return new EmptyViewHolder(itemView);
}
-
指定触摸模式
TOUCH_MODE_ROOT
:点击整个item选中TOUCH_MODE_CHILD
:点击CheckBox选中
@Override
protected int getTouchMode() {
//指定触摸选择模式
return EditAdapter.TOUCH_MODE_ROOT;
}
- 数据绑定
@Override
protected void convert(MyDataBean item, BaseEditViewHolder vh) {
if (vh instanceof MyViewHolder){
MyViewHolder viewHolder = (MyViewHolder) vh;
viewHolder.tvTitle.setText(item.getTitle());
viewHolder.tvContent.setText(item.getContent());
}
}
- 自定义ViewHolder,继承
BaseEditViewHolder
,并重写getHideView
和getCheckBox
方法,返回隐藏区域View和选择按钮
public static class MyViewHolder extends BaseEditViewHolder {
public MyViewHolder(@NonNull View itemView) {
super(itemView);
......
}
@Override
public View getHideView() {
return checkBox;
}
@Override
public CheckBox getCheckBox() {
return checkBox;
}
}
-
在
Activity
或Fragment
中更新UI- 指定模式为
EDIT_MODE
(进入编辑模式)
myEditAdapter.changeMode(EditAdapter.EDIT_MODE);
- 指定模式为
SHOW_MODE
(退出编辑模式)
myEditAdapter.changeMode(EditAdapter.SHOW_MODE);
- 全选所有项
myEditAdapter.selectedAllItem();
- 反选所有项
myEditAdapter.unSelectedAllItem();
- 删除选择项
myEditAdapter.removeSelectedItem();
- 判断是否选择全部 (用来判断点击全选按钮时,应该调用
selectedAllItem
还是unSelectedAllItem
)
myEditAdapter.isSelectedAllItem()
- 指定模式为
-
注册事件监听器
myEditAdapter.setEditSelectedListener(new IEditSelectedListener() {
//回调当前选中项数量
@Override
public void onSelectedItemCount(int count) {
tvCheckItemCount.setText(String.format("共选中%s项", count));
}
//回调长按进入编辑模式
@Override
public void onLongClickEnterEditMode() {
myEditAdapter.changeMode(EditAdapter.EDIT_MODE);
}
});
10、如果使用下拉刷新控件,记得在进入编辑模式后,关闭下拉刷新,以SmartRefreshLayout为例
进入编辑模式后
smartRefreshLayout.setEnableRefresh(false);
退出编辑模式后
smartRefreshLayout.setEnableRefresh(true);
具体用法欢迎进入仓库查看Demo