安卓 recycleView长按 多选进行删除
时间: 2023-09-13 21:03:48 浏览: 99
要在安卓的RecyclerView中实现长按多选并删除子项的功能,您可以按照以下步骤进行:
1. 实现一个长按事件监听器,可以在用户长按某个子项时被触发。
```java
public interface OnItemLongClickListener {
void onItemLongClick(View view, int position);
}
```
2. 在RecyclerView的Adapter中设置一个长按事件监听器和一个选中状态的数组。
```java
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private OnItemLongClickListener onItemLongClickListener;
private boolean[] selected;
public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
this.onItemLongClickListener = onItemLongClickListener;
}
public void setSelected(boolean[] selected) {
this.selected = selected;
}
// ...
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
// ...
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (onItemLongClickListener != null) {
onItemLongClickListener.onItemLongClick(v, position);
}
return true;
}
});
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selected[position] = !selected[position];
notifyItemChanged(position);
}
});
if (selected[position]) {
holder.itemView.setBackgroundColor(Color.RED);
} else {
holder.itemView.setBackgroundColor(Color.WHITE);
}
}
// ...
}
```
3. 在Activity或Fragment中实现该长按事件监听器,并在其中实现多选删除。
```java
myAdapter.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public void onItemLongClick(View view, int position) {
// 初始化选中状态数组
boolean[] selected = new boolean[myDataset.size()];
Arrays.fill(selected, false);
selected[position] = true;
myAdapter.setSelected(selected);
myAdapter.notifyDataSetChanged();
// 显示删除按钮
deleteButton.setVisibility(View.VISIBLE);
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 删除选中的子项
for (int i = selected.length - 1; i >= 0; i--) {
if (selected[i]) {
myDataset.remove(i);
myAdapter.notifyItemRemoved(i);
}
}
// 隐藏删除按钮
deleteButton.setVisibility(View.GONE);
// 重置选中状态数组
Arrays.fill(selected, false);
myAdapter.setSelected(selected);
myAdapter.notifyDataSetChanged();
}
});
}
});
```
这样,当用户长按某个子项时,就会触发相应的长按事件监听器,并进入多选删除模式。用户可以单击每个子项来选择或取消选择,选择完成后,用户可以点击删除按钮来删除选中的子项。
阅读全文