DiffUtil和LiveData使用時遇到的問題


android在28之后換成了androidx,在此之前也可以用到這些功能,不過是引入的包不同,寫法也有一些小的差別。我們之前的代碼使用的是BaseQuickAdapter,所以不可以直接使用JetPack那一套東西,我把DiffUtil和LiveData以及ViewModel挑出來使用,這三個正好組成一套,可以局部刷新。在局部刷新的實現非常的簡單,但是我卻碰到了一個麻煩,以至於我花了四天的時間才找到問題點,所以必須要寫下來。

我先說一下,我這個是聊天界面,所以第一頁有一個未讀消息數,如果進入到聊天界面未讀消息數就清零,問題就出在我從聊天界面退出的時候仍然顯示未讀消息數,查看數據未讀消息數是零,也就是說界面顯示的和adapter中的數據不一樣。一開始我懷疑adapter中的data數據被改了,所以我開始監視這個List,結果一無所獲,除了在LiveData中修改adapter中List的數據,再也沒有其它的操作。嘗試各種方法用了三天時間,直接第四天我決定變換一下思路,沒有偷改列表,有沒有可能是列表中的值在其它地方被改掉了。事實證明確實是這個問題。我通過EventBus收到一個消息之后就把這個消息放到了adapter的列表中了,這個對象其它地方也在使用,打開聊天界面的時候它就被清零了,所以從聊天界面返回時DiffUtil發現未讀消息數是一樣的,不需要刷新。解決的辦法就是收到消息之后clone這個對象,至於深淺大家看自己的需要,我這里需要關心的未讀數是int,所以淺clone就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM