RecyclerView使用ItemTouchHelper实现侧滑删除
RecyclerView使用ItemTouchHelper实现侧滑删除
一、目标
二、下载地址
神马笔记最新版本下载:【神马笔记 版本1.5.0——笔名功能.apk】
三、功能设计
笔名共有4个部分组成——头像、昵称、个性签名、图片签名。
分享笔记时,增加一个时间信息。
因此,完整的笔名由5个部分组成。分成2组:
- 头像、昵称、时间、个性签名
- 图片签名
每组信息可以独立显示或者关闭。
笔名共有4种显示方式
- 二者都显示
- 只显示头像等信息
- 只显示图片签名
- 都不显示
分享时,默认为二者都显示。
可以通过向左滑动,关闭不需要的笔名信息。
四、准备工作
侧滑功能,使用ItemTouchHelper
实现。
如何使用ItemTouchHelper
可以参考《RecyclerView使用ItemTouchHelper实现拖拽排序》。
ItemTouchHelper
同时支持拖拽和侧滑2种操作。
五、组合起来
1. SwipeCallback
private static class SwipeCallback extends ItemTouchHelper.Callback {
ShareArticleFragment parent;
SwipeCallback(ShareArticleFragment f) {
this.parent = f;
}
@Override
public boolean isLongPressDragEnabled() {
return false;
}
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView,
@NonNull RecyclerView.ViewHolder viewHolder) {
boolean enable = (viewHolder instanceof MasterViewHolder) || (viewHolder instanceof VisionViewHolder);
int dragDirs = 0;
int swipeDirs = (enable)? ItemTouchHelper.LEFT: 0;
return makeMovementFlags(dragDirs, swipeDirs);
}
@Override
public boolean onMove(@NonNull RecyclerView recyclerView,
@NonNull RecyclerView.ViewHolder viewHolder,
@NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
parent.requestSwipe(viewHolder, direction);
}
}
2. 处理侧滑操作
void requestSwipe(RecyclerView.ViewHolder viewHolder, int direction) {
if (direction != ItemTouchHelper.LEFT) {
return;
}
if (viewHolder instanceof MasterViewHolder) {
Object obj = masterHelper.masterItem;
int index = provider.indexOf(obj);
if (index >= 0) {
provider.remove(index);
adapter.notifyItemRemoved(index);
}
} else if (viewHolder instanceof VisionViewHolder) {
Object obj = masterHelper.visionItem;
int index = provider.indexOf(obj);
if (index >= 0) {
provider.remove(index);
adapter.notifyItemRemoved(index);
}
}
if (masterHelper.isGone()) {
Object obj = masterHelper.separatorItem;
int index = provider.indexOf(obj);
if (index >= 0) {
provider.remove(index);
adapter.notifyItemRemoved(index);
}
}
}
六、Finally
~劝君更尽一杯酒~西出阳关无故人~