SwipeRecyclerView-快速构建MD化的RecyclerView滑动菜单

SourceQuest

SwipeRecyclerView-快速构建MD化的RecyclerView滑动菜单

项目地址:https://github.com/yanzhenjie/SwipeRecyclerView

此项目是一个RecyclerView的扩展,Android提供了RecyclerView这一强大的滚动控件,但实际使用起来却较为麻烦。如需快速添加滑动菜单,这个库能帮你解决问题。

特性

  1. Item侧滑菜单,支持水平分布、垂直分布
  2. Item长按拖拽、侧滑删除
  3. 添加/移除HeaderView/FooterView
  4. 自动/点击加载更多的功能
  5. Sticky普通布局黏贴和ReyclerView分组黏贴

如何使用

在app的build.gradle里添加如下代码:

dependencies {
    implementation 'com.yanzhenjie:recyclerview-swipe:1.2.3'
}

之后便可以在XML布局中加入SwipeRecyclerView:

<com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView  
    .../>

之后便可以设置侧滑菜单了:

SwipeMenuRecyclerView recyclerView = findViewById(R.id.swipeRecyclerView)
recyclerView.setSwipeMenuCreator((leftMenu, rightMenu, position) -> {
    SwipeMenuItem delete = new SwipeMenuItem(coordinatorLayout.getContext())
        .setBackgroundColorResource(R.color.colorRed)
        .setImage(R.drawable.ic_delete_white_24dp)
        .setHeight(MATCH_PARENT)
        .setWidth(200);
    leftMenu.addMenuItem(delete);
});

Kotlin:

val recyclerView = findViewById(R.id.swipeRecyclerView)
recyclerView.setSwipeMenuCreator({ 
    leftMenu, rightMenu, position->
    val delete = SwipeMenuItem(coordinatorLayout.getContext())
        .setBackgroundColorResource(R.color.colorRed)
        .setImage(R.drawable.ic_delete_white_24dp)
        .setHeight(MATCH_PARENT)
        .setWidth(200)
    leftMenu.addMenuItem(delete) 
})

为侧滑菜单设置监听:

recyclerView.setSwipeMenuItemClickListener((menuBridge, position) -> {
    menuBridge.closeMenu();
    int direction = menuBridge.getDirection();
    if (direction == SwipeMenuRecyclerView.LEFT_DIRECTION
        && menuBridge.getPosition() == 0) {
            //do something       
    }
});

Kotlin:

recyclerView.setSwipeMenuItemClickListener({ menuBridge, position->
    menuBridge.closeMenu()
    val direction = menuBridge.getDirection()
    if ((direction == SwipeMenuRecyclerView.LEFT_DIRECTION && menuBridge.getPosition() === 0)) {
         //do something 
    } 
})

侧滑删除和拖拽

拖拽和侧滑删除的功能默认关闭的,所以先要打开功能:

recyclerView.setLongPressDragEnabled(true); // 拖拽排序,默认关闭。
recyclerView.setItemViewSwipeEnabled(true); // 侧滑删除,默认关闭。

只需要设置上面两个属性就可以进行相应的动作了,如果不需要哪个,不要打开就可以了。

然后监听拖拽和侧滑的动作,进行数据更新:

recyclerView.setOnItemMoveListener(mItemMoveListener);// 监听拖拽,更新UI。

OnItemMoveListener mItemMoveListener = new OnItemMoveListener() {
    @Override
    public boolean onItemMove(ViewHolder srcHolder, ViewHolder targetHolder) {
        // 此方法在Item拖拽交换位置时被调用。
        // 第一个参数是要交换为之的Item,第二个是目标位置的Item。
        // 交换数据,并更新adapter。
        int fromPosition = srcHolder.getAdapterPosition();
        int toPosition = targetHolder.getAdapterPosition();
        Collections.swap(mDataList, fromPosition, toPosition);
        adapter.notifyItemMoved(fromPosition, toPosition);
        // 返回true,表示数据交换成功,ItemView可以交换位置。
        return true;
    }

    @Override
    public void onItemDismiss(ViewHolder srcHolder) {
        // 此方法在Item在侧滑删除时被调用。
        // 从数据源移除该Item对应的数据,并刷新Adapter。
        int position = srcHolder.getAdapterPosition();
        mDataList.remove(position);
        adapter.notifyItemRemoved(position);
    }
};

还有更多功能,请到GitHub页面查看Readme。

该项目基于 Apache-2.0 许可证。

Tags: , ,

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据