在 ListView 設置 OnItemLongClickListener,彈出 AlertDialog 確認後,從數據源移除對應項目並調用 notifyDataSetChanged() 刷新視圖。
public class MyAdapter extends BaseAdapter {
private List dataList;
private Context context;
public MyAdapter(Context context, List dataList) {
this.context = context;
this.dataList = dataList;
}
@Override
public int getCount() { return dataList.size(); }
@Override
public Object getItem(int position) { return dataList.get(position); }
@Override
public long getItemId(int position) { return position; }
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ViewHolder 模式優化
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
holder = new ViewHolder();
holder.textView = convertView.findViewById(R.id.item_text);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(dataList.get(position));
return convertView;
}
static class ViewHolder { TextView textView; }
// 供外部調用刪除
public void removeItem(int position) {
if (position >= 0 && position < dataList.size()) {
dataList.remove(position);
notifyDataSetChanged();
}
}
}
// Activity 中設置長按監聽
listView.setOnItemLongClickListener((parent, view, position, id) -> {
new AlertDialog.Builder(MainActivity.this)
.setTitle("確認刪除")
.setMessage("確定要刪除這項嗎?")
.setPositiveButton("刪除", (dialog, which) -> adapter.removeItem(position))
.setNegativeButton("取消", null)
.show();
return true; // 消費事件
});
removeItemLayoutTransition 或第三方庫實現刪除動畫