有沒有辦法恢復刷卡動作和視圖持有人恢復到初始位置後刷卡完成,onSwiped
被呼籲ItemTouchHelper.Callback
實例?我得到了RecyclerView
,ItemTouchHelper
和ItemTouchHelper.Callback
實例在一起很好地工作,我只需要恢復的刷卡動作和不消除某些情況下,刷卡項目。的Android RecyclerView ItemTouchHelper恢復刷卡和恢復視圖架
回答
谷歌的ItemTouchHelper
執行假定每被刷掉的項目將最終從回收站視圖中刪除,而在某些應用程序中可能不是這種情況。
RecoverAnimation
是ItemTouchHelper
中的嵌套類,用於管理滑動/拖動項目的觸摸動畫。雖然顧名思義,它僅恢復項目的位置,它實際上是用來恢復(取消刷卡/拖動)和更換(搬出刷卡或拖替換)項目的唯一類。奇怪的命名。
RecoverAnimation
中有一個名爲mIsPendingCleanup
的布爾屬性,其中ItemTouchHelper
用於確定該項目是否正在等待刪除。所以ItemTouchHelper
,附加RecoverAnimation
該項目後,將成功刷出來後該屬性,並且動畫沒有得到恢復從動畫列表中,只要這個屬性被設置刪除。問題是,mIsPendingCleanup
將永遠爲一個刷卡出項進行設置,從而導致RecoverAnimation
該項目永遠不會被從動畫列表中刪除。因此,即使您在繼續滑動後恢復了物品的位置,只要您觸摸該物品,它就會立即返回到已移出的位置 - 因爲RecoverAnimation會使動畫從最新的滑出位置開始。
不幸的是,將ItemTouchHelper
類源代碼複製到與支持庫中相同的包中,並從RecoverAnimation
類中刪除mIsPendingCleanup
屬性。我不確定這是否可以被Google接受,並且我尚未向Play Store發佈更新,以確定它是否會導致拒絕,但您可以從支持庫v22.2.1中找到類別源代碼在https://gist.github.com/kukabi/f46e1c0503d2806acbe2提到上述修復。
請您介紹一下這個解決方案的一些細節。還沒有得到它 – Clxy
即使現在這個假設是有效的嗎? –
此問題的一個骯髒的解決辦法的解決方案是通過調用ItemTouchHelper::attachToRecyclerView(RecyclerView)
兩次,然後調用私有方法ItemTouchHelper::destroyCallbacks()
重新連接的ItemTouchHelper。 destroyCallbacks()
刪除項目裝飾和所有聽衆,但也清除所有RecoverAnimations。
請注意,我們需要先致電itemTouchHelper.attachToRecyclerView(null)
以誘使ItemTouchHelper
認爲第二次致電itemTouchHelper.attachToRecyclerView(recyclerView)
是一個新的回收視圖。
進一步的細節看一看成ItemTouchHelper
here的源代碼。解決方法的
實施例:
RecyclerView recyclerView = findViewById(R.id.recycler_view);
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
...
// Workaround to reset swiped out views
itemTouchHelper.attachToRecyclerView(null);
itemTouchHelper.attachToRecyclerView(recyclerView);
考慮它作爲一個髒解決方法,因爲該方法使用的ItemTouchHelper
內部,未記錄的實現細節。
更新:
從ItemTouchHelper::attachToRecyclerView(RecyclerView)
的documentation:
如果TouchHelper已連接到一個RecyclerView,它首先會從以前的一個分離。您可以使用null調用此方法以將其從當前的RecyclerView分離。
和參數文件中:
的RecyclerView實例您想,如果你想從目前的RecyclerView刪除ItemTouchHelper添加該助手或空。
所以至少它是部分記錄。
如果我沒有結婚,我會和你結婚。謝謝你,這是爲我工作的唯一解決方案。 –
您的解決方案使該行無需任何動畫即可輕鬆滑動。這是更容易,並避免了取決於您的代碼notifyItemChanged隨附的一些樣板代碼,但它不具有吸引力。 – RJFares
呼叫notifyDataSetChanged您的適配器,使刷卡回來工作相一致
這應該是正確的評論 –
你應該ItemTouchHelper.Callback
覆蓋onSwiped
方法,並刷新該特定項目。
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder,
int direction) {
adapter.notifyItemChanged(viewHolder.getAdapterPosition());
}
- 1. RecyclerView和ItemTouchHelper刷卡以消除問題
- 2. Android:恢復恢復時間
- 3. Android:恢復刷新ArrayAdapter
- 4. 保存和恢復視圖狀態android
- 5. 恢復視圖後刷新數據
- 6. 恢復和恢復方案
- 7. 如何恢復RecyclerView的LayoutManager?
- 8. 觸摸/刷卡後恢復flexslider
- 9. 恢復視圖的祕密
- 10. android阻止視圖恢復其狀態
- 11. 恢復Eclipse透視圖
- 12. 的Android - AlarmManager恢復
- 13. Android導航選項卡:恢復片段視圖狀態
- 14. 如何恢復更新視圖恢復AVAudioplayer
- 15. 恢復圖像
- 16. TensorFlow:eval恢復圖
- 17. Android備份和恢復
- 18. Android和Mifare Classic RFID恢復
- 19. 暫停和恢復AsyncTasks? (Android)
- 20. 刷新ThemeResources恢復應用
- 21. 如何恢復Android中恢復活動中的現有選項卡?
- 22. 恢復卡石英作業
- 23. 旋轉後恢復RecyclerView狀態
- 24. 恢復離子框架CSS
- 25. 恢復腳手架命令
- 26. MySQL錯誤的恢復數據恢復
- 27. 圖像恢復GUI
- 28. 停止後恢復恢復同步
- 29. 實體框架 - 如何檢測可恢復和不可恢復的異常
- 30. 的Android的MediaController恢復
你有答案嗎? – maveroid
@maveroid是的,請看下面。 –
謝謝..尼克斯工作.. – maveroid