Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> Android adapter has changed解決方法

Android adapter has changed解決方法

編輯:高級開發

 很多新手在android開發時可能對Thread和Message以及Handler、Looper概念不是很清楚,可能產生類似 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.的錯誤。在這裡給出以下幾點可以幫助你了解該問題:

  1.改變適配器Adapter內容時不要在後台線程中,必須在UI線程中處理,這點可以通過Handler傳出來解決。

  2.嘗試Adapter的notifyDataSetChanged()方法,當然主要看你代碼的具體情況。

  以上只貌似只是把錯誤信息翻譯過來而已,真正的原因請看源代碼:

  mItemCount = mAdapter == null ? 0 : mAdapter.getCount();

  ..... //中間是其他代碼就不拷貝了

  else if (mItemCount != mAdapter.getCount()) {//這裡可以看出為什麼會拋出adapter has changed,是因為你可能還有線程在跑,更新了mAdapter.getCount();的返回值

  throw new 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(" + getId() + ", " + getClass()

  + ") with Adapter(" + mAdapter.getClass() + ")]");

  ============

  ps:知其然,知其所以然。剛開始我發現寫不寫notifyDataSetChanged()都能實現效果,於是我就把它注釋了,直到出了問題,我看了以上內容,我就明白為什麼會有adapter has changed的提示,也明白了notifyDataSetChanged()的含義。

  我的理解是:增加了內容長度改變了 但是沒有通知更新 當選中增加的那個內容時 就造成了 數組越界(或者別的問題)

  所以添加內容後要更新。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved