Android ListView出現(xiàn)異常解決辦法
Android ListView 異常解決辦法:
ListView:The content of the adapter has changed but ListView did not receive a notification使用ListView時(shí)遇到如下的異常信息:
10-26 18:30:45.085: E/AndroidRuntime(7323): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131296280, class android.widget.ListView) with Adapter(class com.souapp.appmanager.ApkListAdapter)]
其實(shí)我在listview的adapter添加完數(shù)據(jù)后,使用了handler去調(diào)用datper.notifyDataSetChanged();來通知listview顯示變化結(jié)果;
雖然自己很確定沒有多線程操作,但是有人說listview本來就是線程不安全的,這個(gè)不關(guān)心了,看了國外一個(gè)開發(fā)者的方法很簡(jiǎn)單。
解決方法1:
ListView.requestLayout();
Adatper.notifyDataSetChanged();
在你adpater更新前,調(diào)用listview的requestLayout(),這樣做無非就是彌補(bǔ)數(shù)據(jù)數(shù)量不一致導(dǎo)致報(bào)錯(cuò),雖然一個(gè)解決的好辦法。
但是實(shí)際上用的時(shí)候我發(fā)現(xiàn)也會(huì)出問題,想了想最徹底的解決辦法
徹底解決方法:
把 listview的adapter數(shù)據(jù)更新和dapter.notifyDataSetChanged()方法的調(diào)用必須同時(shí)放到單獨(dú)一個(gè)線程里,報(bào)錯(cuò)基本是都是這個(gè)原因,有人把a(bǔ)dapter里的數(shù)據(jù)更新了,但是 dapter.notifyDataSetChanged() 放到一個(gè)單獨(dú)線程去更新,結(jié)果出現(xiàn)notifyDataSetChanged更新同步的問題
解決更新ListView數(shù)據(jù)時(shí)出現(xiàn)的問題分析總結(jié):
沒仔細(xì)讀的話,一眼看去就說說在非UI線程去更新了ListVIew的數(shù)據(jù),然后下意識(shí)的認(rèn)為是調(diào)用adapter.notifyDataSetChanged方法的調(diào)用被放到了非UI線程,仔細(xì)一看是說更新ListView的數(shù)據(jù)以及通知數(shù)據(jù)更新要放到同一個(gè)線程(主線程),是為了保持?jǐn)?shù)據(jù)一致,adapter里面一般是會(huì)存放一個(gè)數(shù)組,對(duì)那個(gè)數(shù)據(jù)的修改和調(diào)用notifyDataSetChanged方法要放到一起,而且是放到主線程,如果對(duì)數(shù)據(jù)的更新放到了子線程,notifyDataSetChanged的調(diào)用在主線程,notifyDataSetChanged的調(diào)用會(huì)默認(rèn)把ListView綁定到主線程里面了,這個(gè)時(shí)候子線程來更新數(shù)據(jù)的話就會(huì)出現(xiàn)在非UI線程修改UI線程的東西了。
這個(gè)問題也不是必崩潰,低版本崩的多,高版本好像崩潰得少
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Flutter綜合部分頁面詳情頁實(shí)現(xiàn)過程示例
這篇文章主要為大家介紹了Flutter綜合部分頁面詳情頁實(shí)現(xiàn)過程步驟示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Android實(shí)現(xiàn)字幕滾動(dòng)的方法
這篇文章主要介紹了Android實(shí)現(xiàn)字幕滾動(dòng)的方法,很實(shí)用的功能,需要的朋友可以參考下2014-07-07Android 消息機(jī)制以及handler的內(nèi)存泄露
這篇文章主要介紹了Android 消息機(jī)制以及handler的內(nèi)存泄露的相關(guān)資料,需要的朋友可以參考下2016-09-09Android編程使用緩存優(yōu)化ListView的方法
這篇文章主要介紹了Android編程使用緩存優(yōu)化ListView的方法,涉及ListView針對(duì)sd卡緩存及內(nèi)存緩存的優(yōu)化技巧,需要的朋友可以參考下2015-12-12Android實(shí)現(xiàn)評(píng)論欄隨Recyclerview滑動(dòng)左右移動(dòng)
這篇文章主要介紹了Android實(shí)現(xiàn)評(píng)論欄隨Recyclerview滑動(dòng)左右移動(dòng)效果,仿約會(huì)吧應(yīng)用詳情頁實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2016-05-05ImageView 實(shí)現(xiàn)Android colorPikcer 選擇器的示例代碼
本篇文章主要介紹了ImageView 實(shí)現(xiàn)Android colorPikcer 選擇器的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-10-10Android?Flutter實(shí)現(xiàn)"斑馬紋"背景的示例代碼
本文將通過實(shí)現(xiàn)一個(gè)canvas繪制斑馬紋類。使用Stack布局,將斑馬紋放在下方作為背景板,需要展示的內(nèi)容在上方。從而實(shí)現(xiàn)?“斑馬紋”背景,感興趣的可以了解一下2022-06-06