效果图如下:

侧滑删除

话不多说直接上代码:

第一步:

引入第三方库:

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

第二步:

在需要添加侧滑布局的地方用SwipeRecyclerView替换RecycleView

<com.yanzhenjie.recyclerview.SwipeRecyclerView
    android:id="@+id/recyclerview"
    android:background="@drawable/shape_common_tophead"
    android:paddingTop="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

第三步:

SwipeRecyclerView recyclerview = findViewById(R.id.recyclerview);
recyclerview.setLayoutManager(new LinearLayoutManager(getContext()));
BillSumarryAdapter mAdapter = new BillSumarryAdapter();
mAdapter.setNewInstance(map.get(time));

mAdapter.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
       //TODO点击事件
    }
});

recyclerview.setAdapter(null);
recyclerview.setSwipeMenuCreator(mSwipeMenuCreator);
recyclerview.setOnItemMenuClickListener(new OnItemMenuClickListener() {
    @Override
    public void onItemClick(SwipeMenuBridge menuBridge, int position) {
        // 任何操作必须先关闭菜单,否则可能出现Item菜单打开状态错乱。
        menuBridge.closeMenu();

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

        if (0 == menuPosition) {
            //TODO点击编辑
        } else if (1 == menuPosition) {
             //TODO点击删除
        }

    }
});
recyclerview.setAdapter(mAdapter);
/**
 * 菜单创建器,在Item要创建菜单的时候调用。
 */
private SwipeMenuCreator mSwipeMenuCreator = new SwipeMenuCreator() {
    @Override
    public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int position) {
        int width = getContext().getResources().getDimensionPixelSize(R.dimen.dp_90);

        // 1. MATCH_PARENT 自适应高度,保持和Item一样高;
        // 2. 指定具体的高,比如80;
        // 3. WRAP_CONTENT,自身高度,不推荐;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;

        SwipeMenuItem addItem = new SwipeMenuItem(getContext()).setBackground(R.drawable.shape_editor)
                .setText("编辑")
                .setTextColor(Color.WHITE)
                .setTextSize(14)
                .setWidth(width)
                .setHeight(height);
        swipeRightMenu.addMenuItem(addItem); // 添加菜单到左侧。

        SwipeMenuItem closeItem = new SwipeMenuItem(getContext()).setBackground(R.drawable.shape_rightradius_red)
                .setText("删除")
                .setTextColor(Color.WHITE)
                .setTextSize(14)
                .setWidth(width)
                .setHeight(height);
        swipeRightMenu.addMenuItem(closeItem); // 添加菜单到右侧。
    }
};

注意:如果我们需要设置两个item的上下间距,那么我们不可以在xml布局中去操作,而是需要在代码找哪个操作才能够得到我们想要的效果。

代码如下:

recyclerview2.addItemDecoration(object : ItemDecoration() {
    override fun getItemOffsets(
        outRect: Rect,
        view: View,
        parent: RecyclerView,
        state: RecyclerView.State
    ) {
        super.getItemOffsets(outRect, view, parent, state)
        outRect.top = 10
    }

})

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐