效果图如下:
侧滑删除
话不多说直接上代码:
第一步:
引入第三方库:
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
}
})