效果图如下:
侧滑删除
话不多说直接上代码:
第一步:
引入第三方库:
implementation 'com.yanzhenjie.recyclerview:x:1.3.2'
第二步:
在需要添加侧滑布局的地方用SwipeRecyclerView替换RecycleView
第三步:
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 } })