使用 HorizontalScrollView 包裹 Item 佈局實現左滑刪除,點擊刪除按鈕移除 Item 後,「操作區域(刪除按鈕)」仍殘留在列表中,未隨 Item 消失。
HorizontalScrollView 內部視圖結構未隨數據變化正確刷新。刪除數據項後,Adapter 的 notifyDataSetChanged() 雖觸發視圖重建,但 HorizontalScrollView 的滾動狀態、子視圖復用機制導致舊的操作視圖未被正確移除或重置。
在刪除操作後,必須強制將對應的 HorizontalScrollView 滾動回初始位置(關閉狀態),再通知適配器刷新。
// holder.hsView 為 Item 佈局中的 HorizontalScrollView
holder.hsView.scrollTo(0, 0); // 關鍵:強制滾動到左側,隱藏操作區域
// 從數據源移除
dataList.remove(position);
// 通知適配器局部刷新(比 notifyDataSetChanged 更高效)
notifyItemRemoved(position);
notifyItemRangeChanged(position, dataList.size());
建議自定義 SwipeMenuLayout extends HorizontalScrollView,內部封裝:
smoothScrollTo(0,0))。openMenu() / closeMenu() 供外部調用。HorizontalScrollView 實現左滑刪除的關鍵痛點在於「狀態重置」。刪除前先 scrollTo(0,0) 關閉菜單,再移除數據並通知適配器,即可徹底解決操作區域殘留問題。