SwipeRecyclerView实现侧滑删除(解决删除后不刷新数据)

 

先放上GitHub地址:https://github.com/yanzhenjie/SwipeRecyclerView

效果图就不放了,跟iOS微信的侧滑是类似的效果,可以自定义样式。

 

如何使用:

如果你使用的是android support库,那么请添加下述依赖:

implementation 'com.yanzhenjie.recyclerview:support:1.3.2'

如果你使用的是android x库,那么请添加下述依赖:

implementation 'com.yanzhenjie.recyclerview:x:1.3.2'

导入完依赖后将 recyclerview 换为:SwipeRecyclerView

用法跟普通的 recyclerview 是一样的,activity:

        // 添加菜单
        recyclerMyLiveList.setSwipeMenuCreator(swipeMenuCreator);
        // 菜单点击监听。
        recyclerMyLiveList.setOnItemMenuClickListener(mItemMenuClickListener);

        recyclerMyLiveList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        adapter = new MyLiveListAdapter(this);
        recyclerMyLiveList.setAdapter(adapter);

    // 设置菜单监听器。
    SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() {
        // 创建菜单:
        @Override
        public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {
            int width = getResources().getDimensionPixelSize(R.dimen.dp_70);
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            SwipeMenuItem deleteItem = new SwipeMenuItem(PlayBackMyLiveListActivity.this)
                    .setBackground(R.drawable.red_bg)
                    //.setImage(R.mipmap.delete)
                    .setTextColor(Color.WHITE)
                    .setText(R.string.delete)
                    .setTextSize(15)
                    .setWidth(width)
                    .setHeight(height);
            swipeRightMenu.addMenuItem(deleteItem);
        }
    };

    // 侧滑的点击事件
    OnItemMenuClickListener mItemMenuClickListener = new OnItemMenuClickListener() {
        @Override
        public void onItemClick(SwipeMenuBridge menuBridge, int position) {

            // 任何操作必须先关闭菜单,否则可能出现Item菜单打开状态错乱。
            menuBridge.closeMenu();

            // 左侧还是右侧菜单:
            int direction = menuBridge.getDirection();
            // 菜单在Item中的Position:
            int menuPosition = menuBridge.getPosition();

            // 调用删除接口
            presenter.DELETE_LIVE(token,data.get(position).getLive_ID());

            adapter.removeDataAt(position);

        }
    };

删除后你可能会遇到数据不刷新的问题,解决方法:

在adapter手动添加:

public void removeDataAt(int position) {
    list.remove(position);
    notifyItemRemoved(position);
}

在调用完删除接口后就可以调用 adapter 的 removeDataAt 方法,那么问题就解决了~

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值