編輯:關於Android編程
Android ListView 異常解決辦法:
ListView:The content of the adapter has changed but ListView did not receive a notification使用ListView時遇到如下的異常信息:
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)]
其實我在listview的adapter添加完數據後,使用了handler去調用datper.notifyDataSetChanged();來通知listview顯示變化結果;
雖然自己很確定沒有多線程操作,但是有人說listview本來就是線程不安全的,這個不關心了,看了國外一個開發者的方法很簡單。
解決方法1:
ListView.requestLayout();
Adatper.notifyDataSetChanged();
在你adpater更新前,調用listview的requestLayout(),這樣做無非就是彌補數據數量不一致導致報錯,雖然一個解決的好辦法。
但是實際上用的時候我發現也會出問題,想了想最徹底的解決辦法
徹底解決方法:
把 listview的adapter數據更新和dapter.notifyDataSetChanged()方法的調用必須同時放到單獨一個線程裡,報錯基本是都是這個原因,有人把adapter裡的數據更新了,但是 dapter.notifyDataSetChanged() 放到一個單獨線程去更新,結果出現notifyDataSetChanged更新同步的問題
解決更新ListView數據時出現的問題分析總結:
沒仔細讀的話,一眼看去就說說在非UI線程去更新了ListVIew的數據,然後下意識的認為是調用adapter.notifyDataSetChanged方法的調用被放到了非UI線程,仔細一看是說更新ListView的數據以及通知數據更新要放到同一個線程(主線程),是為了保持數據一致,adapter裡面一般是會存放一個數組,對那個數據的修改和調用notifyDataSetChanged方法要放到一起,而且是放到主線程,如果對數據的更新放到了子線程,notifyDataSetChanged的調用在主線程,notifyDataSetChanged的調用會默認把ListView綁定到主線程裡面了,這個時候子線程來更新數據的話就會出現在非UI線程修改UI線程的東西了。
這個問題也不是必崩潰,低版本崩的多,高版本好像崩潰得少
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
一、Android Camera可以做哪些?1、功能拍攝相片 視頻錄制 取景器(掃描類應用,如人臉識別,名片識別,條形碼識別)2、根據Camera API實現自己的拍照程
1. 錯誤提示信息 錯誤大概意思:連接到adb(android debug bridge)出現了一個嚴重的錯誤,你必須重啟adb和Eclipse工具,請確保在位置…
Android中所有控件都繼承自android.view.View,其中android.view.ViewGroup是View的一個重要子類,絕大部分的布局都繼承自Vie
在了解系統的activity,service,broadcastReceiver的啟動過程後,今天將分析下360 DroidPlugin是如何預注冊占坑的?本篇文章主要分