Plain's Blog

休想打败我的生活🔥

EditAdapter 让 RecyclerView 快速集成列表编辑模式

Plain's Avatar 2019-12-09 开源项目

  1. 1. 演示
  2. 2. 添加EditAdapter到你的项目
  3. 3. 如何使用
  4. 4. 其它
    1. 4.1. v1.0.4-stable
    2. 4.2. v1.0.3-alpha
    3. 4.3. v1.0.2-alpha
    4. 4.4. v1.0.1-alpha
    5. 4.5. v1.0-alpha
  5. 5. LICENSE
ic_launcher-web

最近项目有个需求,需要在收藏列表增加编辑模式,包括全选、删除、长按进入编辑模式等,于是对Adapter进行了一下封装,并开源出来,一起交流学习

演示

demo

添加EditAdapter到你的项目

  1. 在项目的 build.gradle 中添加:
1
2
3
4
5
6
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
  1. 添加依赖
1
2
3
4
5
6
dependencies {
// 新版基于此库,必须引入
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.50'
// TAG替换为上方的最新版本号
implementation 'com.github.plain-dev:EditAdapter:TAG'
}

如何使用

  1. 在你的数据实体类中继承SelectedImpl
1
2
3
4
5
6
7
8
9
10
11
12
13
public class MyDataBean extends SelectedImpl {

private String title;
private String content;

public MyDataBean(String title, String content) {
this.title = title;
this.content = content;
}

......

}
  1. 创建一个适配器,继承自BaseQuickEditModeAdapter<T extends ISelected> 创建一个适配器,继承自EditAdapter<T extends ISelected>
1
2
3
4
5
public class TestEditAdapter extends BaseQuickEditModeAdapter<TestBean, BaseViewHolder> {

......

}
  1. 在构造方法中设置一些数据和属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class TestEditAdapter extends BaseQuickEditModeAdapter<TestBean, BaseViewHolder> {

// 指定布局和数据
public TestEditAdapter(@Nullable List<TestBean> data) {
super(R.layout.item_test_edit, data);
}

// 指定CheckBox
@Override
public CheckBox getCheckBox(BaseViewHolder helper) {
return helper.getView(R.id.checkBox);
}

// 指定HideView隐藏的区域,一般为CheckBox
@Override
public View getHideView(BaseViewHolder helper) {
return helper.getView(R.id.checkBox);
}
}
  1. 数据绑定(和BaseQuickAdapter的使用方法一致)
1
2
3
4
5
6
7
8
public class TestEditAdapter extends BaseQuickEditModeAdapter<TestBean, BaseViewHolder> {

@Override
protected void convertView(BaseViewHolder helper, TestBean item) {
helper.setText(R.id.tvTitle, item.getTitle());
}

}
  1. ActivityFragment中更新UI

    • 指定模式为EDIT_MODE(进入编辑模式)

      1
      myEditAdapter.changeMode(BaseQuickEditModeAdapter.EDIT_MODE);
    • 指定模式为SHOW_MODE(退出编辑模式)

      1
      myEditAdapter.changeMode(BaseQuickEditModeAdapter.SHOW_MODE);
    • 全选所有项

      1
      myEditAdapter.selectedAllItem();
    • 反选所有项

      1
      myEditAdapter.unSelectedAllItem();
    • 删除选择项

      1
      myEditAdapter.removeSelectedItem();
    • 判断是否选择全部 (用来判断点击全选按钮🔘时,应该调用selectedAllItem还是unSelectedAllItem)

      1
      myEditAdapter.isSelectedAllItem()
    • 获取删除item所需的参数 (外部实现)

      比如删除接口要求,参数为item的id,号隔开的字符串,可以像下面这么实现,在适配器中重写getDeleteParams方法

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      @Override
      public String getDeleteParams() {
      List<ISelected> selectedList = getSelectedList();
      if (!ListUtils.isEmpty(selectedList)) {
      StringBuilder sb = new StringBuilder();
      for (ISelected iSelected : selectedList) {
      if (iSelected instanceof TestBean) {
      sb.append(((TestBean) iSelected).getId()).append(",");
      }
      }
      return sb.toString();
      }
      return null;
      }

      可以根据接口的要求来实现不同的

  2. 注册事件监听器

1
2
3
4
5
6
7
8
9
10
11
12
13
myEditAdapter.setEditSelectedListener(new IEditSelectedListener() {
//回调当前选中项数量
@Override
public void onSelectedItemCount(int count) {
tvCheckItemCount.setText(String.format("共选中%s项", count));
}

//回调长按进入编辑模式
@Override
public void onLongClickEnterEditMode() {
myEditAdapter.changeMode(BaseQuickEditModeAdapter.EDIT_MODE);
}
});

7、如果使用下拉刷新控件,记得在进入编辑模式后,关闭下拉刷新,以SmartRefreshLayout为例

进入编辑模式后

1
smartRefreshLayout.setEnableRefresh(false);

退出编辑模式后

1
smartRefreshLayout.setEnableRefresh(true);

其它

更新日志

v1.0.4-stable

本次更新内容如下

重构代码,改为继承BaseQuickAdapter实现,功能更强大

v1.0.3-alpha

本次更新内容如下

  • fix:手动选择全部item后,再次点击全选按钮无效的问题
  • add:为解决上述bug,新增一个方法判断当前是否选择全部

v1.0.2-alpha

本次更新内容如下

  • add:长按进入编辑模式
  • add:设置空数据视图
  • modify:优化代码逻辑

v1.0.1-alpha

本次更新内容如下

  • fix:滑到最底部删除元素时发生”Inconsistency detected”的问题

v1.0-alpha

  • 首个预览版
  • 有些问题,请使用新版

有问题欢迎提交issues

状态图标来源iconfont,侵删

感谢BaseRecyclerViewAdapterHelper,本项目继承自该库,并遵循LICENSE


LICENSE

本文作者 : Plain
This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接 : https://plain-dev.com/edit-adapter/

本文最后更新于 天前,文中所描述的信息可能已发生改变