原创首发    
 通过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




























