有沒有辦法恢復刷卡動作和視圖持有人恢復到初始位置後刷卡完成,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. Android:恢復刷新ArrayAdapter
- 2. 保存和恢復視圖狀態android
- 3. 恢復視圖後刷新數據
- 4. 恢復和恢復方案
- 5. 觸摸/刷卡後恢復flexslider
- 6. android阻止視圖恢復其狀態
- 7. 恢復Eclipse透視圖
- 8. Android導航選項卡:恢復片段視圖狀態
- 9. 如何恢復更新視圖恢復AVAudioplayer
- 10. TensorFlow:eval恢復圖
- 11. 暫停和恢復AsyncTasks? (Android)
- 12. Android備份和恢復
- 13. 如何恢復Android中恢復活動中的現有選項卡?
- 14. 恢復卡石英作業
- 15. 旋轉後恢復RecyclerView狀態
- 16. 恢復離子框架CSS
- 17. 圖像恢復GUI
- 18. MySQL錯誤的恢復數據恢復
- 19. 停止後恢復恢復同步
- 20. 恢復視圖的計數器
- 21. 恢復PostgreSQL的物化視圖
- 22. 恢復的視圖狀態屬性
- 23. gwt - 如何恢復以前的視圖
- 24. Android - 視頻重新啓動或恢復
- 25. Android的恢復活動
- 26. 恢復的Android活動
- 27. Android視圖 - 什麼是自動保存和恢復活動
- 28. 應用程序從多任務恢復後刷新視圖
- 29. svn恢復 - 恢復個別修訂版
- 30. dotnet恢復vs. nuget恢復與teamcity
你有答案嗎? – maveroid
@maveroid是的,請看下面。 –
謝謝..尼克斯工作.. – maveroid