1. 程式人生 > >Android RecyclerView 使用 ItemTouchHelper 時異常

Android RecyclerView 使用 ItemTouchHelper 時異常

使用 Callback 處理 ItemTouchHelper 在位置和狀態變化就不說了網上文章一大把。

問題:

釋出新版本後發現,拖動Item在變更位置時,onMove方法無限呼叫,item檢視無限重新整理

定位

基類中預設設定了 setHasStableIds(true); 重點是並且複寫了 getItemId 方法, 直接返回 position。 繼承了這個基類導致掉坑。

原因

setHasStableIds 表明item的Id是唯一且不變的, onMove時 getItemId中的position隨item移動發生了變化,導致RecyclerView認為Item已過期並重新重新整理這2個Item的檢視,而Item還處在觸發onMove的位置上,於是又觸發onMove,無限迴圈。