Android ListView滑动删除item:实现方法与注意事项

Android ListView是Android中最常用的控件之一,它可以方便地展示列表数据。而滑动删除是ListView中比较常用的功能之一,本文将介绍如何实现ListView滑动删除item的功能。

实现思路:

1. 继承BaseAdapter,重写getView()方法,为每个item添加滑动删除功能。在getView()方法中,为每个item添加OnTouchListener,监听滑动操作。

2. 当用户按下item时,记录下按下的点的坐标,并且将item的状态设置为正在滑动中。

3. 当用户手指滑动时,计算出滑动距离,并将item的布局向左移动相应距离。

4. 当用户松开手指时,根据item的滑动距离是否超过了一定阈值,来决定是否删除该item。如果滑动距离超过了阈值,则删除该item,否则恢复item原本的布局。

代码实现:

```java

public class MyAdapter extends BaseAdapter {

private List mData;

private Context mContext;

public MyAdapter(Context context, List data) {

mContext = context;

mData = data;

}

@Override

public int getCount() {

return mData.size();

}

@Override

public Object getItem(int position) {

return mData.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(final int position, View convertView, ViewGroup parent) {

ViewHolder viewHolder;

if (convertView == null) {

convertView = LayoutInflater.from(mContext).inflate(R.layout.item_layout, parent, false);

viewHolder = new ViewHolder();

viewHolder.textView = convertView.findViewById(R.id.text_view);

viewHolder.deleteView = convertView.findViewById(R.id.delete_view);

convertView.setTag(viewHolder);

} else {

viewHolder = (ViewHolder) convertView.getTag();

}

viewHolder.textView.setText(mData.get(position));

//为item添加OnTouchListener,监听滑动操作

convertView.setOnTouchListener(new View.OnTouchListener() {

private int downX;

private boolean isSliding;

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

downX = (int) event.getX();

isSliding = false;

break;

case MotionEvent.ACTION_MOVE:

int distanceX = (int) (event.getX() - downX);

if (distanceX < -20) {

isSliding = true;

//滑动item

ViewHelper.setTranslationX(v, distanceX);

}

break;

case MotionEvent.ACTION_UP:

if (isSliding) {

if ((int) (event.getX() - downX) < -200) {

//滑动距离超过阈值,删除item

mData.remove(position);

notifyDataSetChanged();

} else {

//恢复item原本的布局

ViewHelper.setTranslationX(v, 0);

}

}

break;

}

return true;

}

});

return convertView;

}

private static class ViewHolder {

TextView textView;

View deleteView;

}

}

```

总结:

通过上述实现方法,我们可以方便地为ListView中的每个item添加滑动删除功能。同时,我们也可以在此基础上,实现更复杂的滑动操作,比如滑动菜单、滑动置顶等功能。