在 ListView 中實現長按刪除,調用 adapter.notifyDataSetChanged() 卻發現界面數據未更新,這通常是因為數據源列表未真正移除對應項目,導致適配器仍持有舊數據。
代碼中僅調用了 notifyDataSetChanged(),但未從底層數據源(如 ArrayList)中移除被刪除位置的數據。適配器綁定的是列表引用,列表內容未變,通知刷新自然無效。
// 在 Adapter 內部或持有數據源的 Activity/Fragment 中
fun onItemLongClick(position: Int) {
// 1. 先從數據源移除
dataList.removeAt(position) // 關鍵步驟!
// 2. 再通知適配器更新
adapter.notifyDataSetChanged()
// 或更高效的 notifyItemRemoved(position) (需 RecyclerView)
}
原回答提示「添加一句 companyInfoList.get(position)」,實際意圖應為調用列表的 remove(position) 方法,可能是筆誤或簡寫。正確寫法必須是 移除操作,而非獲取操作。
notifyItemRemoved(position) 實現動畫與精準更新,性能更優。setDataList(newList) 方法,統一處理數據替換與通知。