RecyclerView使用ItemTouchHelper实现侧滑删除

版权声明:个人原创,欢迎转载。 https://blog.csdn.net/chuyangchangxi/article/details/86750867

一、目标

在这里插入图片描述在这里插入图片描述

二、下载地址

神马笔记最新版本下载:【神马笔记 版本1.5.0——笔名功能.apk

三、功能设计

笔名共有4个部分组成——头像、昵称、个性签名、图片签名。

分享笔记时,增加一个时间信息。

因此,完整的笔名由5个部分组成。分成2组:

  1. 头像、昵称、时间、个性签名
  2. 图片签名

每组信息可以独立显示或者关闭。

笔名共有4种显示方式

  1. 二者都显示
  2. 只显示头像等信息
  3. 只显示图片签名
  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

~劝君更尽一杯酒~西出阳关无故人~

猜你喜欢

转载自blog.csdn.net/chuyangchangxi/article/details/86750867