怎么用代码实现recyclerview卡片上滑删除代码用例
时间: 2023-05-31 14:08:05 浏览: 78
很高兴回答您的问题。以下是一个简单的 RecyclerView 上滑删除的实现代码示例:
首先,在您的 RecyclerView 的适配器中,添加如下代码:
```
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<MyItem> mItems;
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnTouchListener {
public TextView mTextView;
public ViewHolder(View v) {
super(v);
mTextView = (TextView) v.findViewById(R.id.item_text);
v.setOnClickListener(this);
v.setOnTouchListener(this);
}
@Override
public void onClick(View v) {
// 处理单击事件
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 记录按下时的坐标
mInitialX = event.getRawX();
mInitialY = event.getRawY();
break;
case MotionEvent.ACTION_UP:
// 判断是否上滑
if(event.getRawY() - mInitialY < -50) {
// 上滑删除
remove(getAdapterPosition());
return true;
}
break;
case MotionEvent.ACTION_MOVE:
// 处理拖动事件
break;
}
return false;
}
}
public MyAdapter(List<MyItem> items) {
mItems = items;
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mItems.get(position).getText());
}
@Override
public int getItemCount() {
return mItems.size();
}
public void remove(int position) {
mItems.remove(position);
notifyItemRemoved(position);
}
}
```
在上述代码中,我们首先为 ViewHolder 添加了一个触摸事件监听器 `OnTouchListener` 以监听滑动事件。具体地,我们在记录按下时的坐标时,使用了 `event.getRawX()` 和 `event.getRawY()` 分别获取屏幕坐标系下的触点坐标。而在判断是否上滑删除时,我们判断了当前触点坐标减去按下时的坐标是否小于一个阈值(50px),来判断是否上滑了一定距离。之后,在适配器的 `remove` 函数中,我们删除了指定位置的项并通知适配器进行更新。
希望这个示例能够帮到您!
阅读全文