首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android BaseAdapter ListView 長按刪除 Item 完整實現

     編輯:程式設計綜合問答

核心思路

在 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; // 消費事件
});

關鍵注意點

  • 數據源同步:必須操作 Adapter 內部持有的數據集合,而非原始列表副本
  • 異步操作:若刪除涉及網絡/數據庫,應在後台線程執行,成功後回主線程調用 removeItem
  • 動畫增強:可配合 LayoutTransition 或第三方庫實現刪除動畫
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved