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

Android ListView 長按刪除後 notifyDataSetChanged 不生效的根因與修復

     編輯:程式設計綜合問答

ListView 刪除項目後界面未刷新的經典陷阱

在 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)」解讀

原回答提示「添加一句 companyInfoList.get(position)」,實際意圖應為調用列表的 remove(position) 方法,可能是筆誤或簡寫。正確寫法必須是 移除操作,而非獲取操作。

最佳實踐建議

  • 遷移至 RecyclerView:配合 notifyItemRemoved(position) 實現動畫與精準更新,性能更優。
  • 數據源封裝:在 Adapter 內部封裝 setDataList(newList) 方法,統一處理數據替換與通知。
  • 異步刪除:若需服務端同步,先本地移除並刷新 UI,再發起網絡請求;失敗時回滾並提示用戶。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved