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

RecyclerView notifyDataSetChanged 無效?嵌套 ListView 時需通知外層適配器

     編輯:程式設計疑難解答

問題場景

RecyclerView 作為 ListView 的 Item 之一(水平滑動),呼叫 notifyDataSetChanged() 後介面不更新,onBindViewHolder 未被觸發。

根本原因

RecyclerView 只是 ListView 某個 Item 內部的 View。當內部資料變更時,僅通知 RecyclerView 適配器是不夠的,因為 ListView 適配器並不知道其 Item 內容已變,不會重新繪製該 Item。

解決方案

在更新完 RecyclerView 適配器資料後,必須同時通知外層 ListView 的適配器刷新。

// 更新內部 RecyclerView 資料
mLikeUsersRecyclerViewAdapter.updateData(mARTICLEs.get(pos).like_users);

// 關鍵步驟:通知外層 ListView 適配器
listViewAdapter.notifyDataSetChanged(); // 假設外層適配器名為 listViewAdapter

進階優化建議

  • 若僅局部資料變更,優先使用 notifyItemChanged()、notifyItemRangeInserted() 等精確通知方法,效能更佳。
  • 考慮使用 RecyclerView 完全取代 ListView,利用 ConcatAdapter 或多型別 Item 實現複雜列表,避免嵌套滑動衝突與通知傳遞問題。
  • 若必須嵌套,請確保內層 RecyclerView 設定 setNestedScrollingEnabled(false) 並妥善處理測量邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved