listview頻繁刷新報錯

在Android編程中使用Adapter時,偶爾會出現如下錯誤:
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。
DDMS中的log也無法定位到準確的出錯位置。檢查錯誤可以從下面幾點入手:
1、檢查Thread,確定沒有在Background thread中直接調用adapter,如果有,請移除相關代碼到Handler中處理;
2、盡量將數據放在adapter類中管理,不需要的時候清除信息(勤寫clear()),及時用notifyDataSetChanged()刷新;
3、在Activity或者Fragment合適的位置(onPause/onStop)要及時檢查thread,有adapter數據處理相關的應馬上停止;
4、這個錯誤經常出現在Activity休眠起來之后,主要還是使用adapter不太小心造成的。如果實在找不到原因,在onPause()函數中停止所有的background thread,并且在onResume()函數最前面清空adapter中的數據,并且adapter.notifyDataSetChanged()。然后重新更新加載數據,這樣一般可以解決問題。

Android開發過程中,使用了大量的ListView,發現這個錯誤偶爾會出現。特別是做壓力測試的時候,不停的點擊刷新,更容易出現這個錯誤。代碼中已經使用了AdapternotifyDataSetChanged()方法通知UI更新了,但是還是會出現這個錯誤。究其根本原因,還是線程之間同步的問題。比如,線程1更新了Adapter中的內容,卻還沒有來得及通知內容已經更新,就又有線程2更新了Adapter中的內容,這個時候如果線程1再通知內容更新,就會出現上述異常了。

?

在此提出一些解決辦法:

對線程進行管理,如果當前Actitivty暫停了,及時停止這些線程。

數據更新后,要及時使用notifyDataSetChanged()方法通知UI,避免出現數據不一致的情況。

數據的更新,最好放在主線程中進行。這樣可以使用同步數據更新與通知內容更新部分的代碼。

總結:

如果listview有數據更新,其己經改變了adapter的getCount()方法。此時必須要通知adapter更新數據,否則就會報adapter數據不匹配的錯誤。當adapter發生變化,即刻調用notifyDataSetChanged方法,避免出現數據不一致的情況。

?

轉載于:https://www.cnblogs.com/zxcblog/p/3239252.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274111.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274111.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274111.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 第十三課 SharedPreferences存儲

SharedPreferences是使用鍵值對的方式來存儲數據的。當保存一條數據時,需要給這條數據提供一個對應的鍵,這樣在讀取數據的時候就可以通過這個鍵把相應的值取出來。而且支SharedPreferences還支持多種不同的數據類型存儲,例如:如果…

DSP的Gel作用

轉自:http://blog.csdn.net/azhgul/article/details/6660960最近剛在研究Davinci系,特此MARK下,以資后續學習之用。 DSP的Gel作用 1 GEL文件基本作用 當CCSStudio啟動時,GEL文件加載到PC機的內存中,如果定義了StartUp(…

解決關于登錄校園網顯示不在IP段的問題方案(要看注意事項哦!)

有時,登錄校園網,賬號和密碼都顯示正確,但是卻顯示出“賬號只能在指定IP段登錄”的問題。 那我們就提供了一個解決方案: 使用WinR,并在輸入框,輸入cmd命令:(如下)接著輸入&#xff1…

jquery插件編寫

jQuery為開發插件提拱了兩個方法,分別是: jQuery.fn.extend(object); jQuery.extend(object); jQuery.extend(object); 為擴展jQuery類本身.為類添加新的方法。可以理解為添加靜態方法。是全局的(位于jQuery命名空間內部的函數)…

gtk/Glade編程 編譯命令不成功 解決方法

摘自:http://blog.chinaunix.net/uid-26746982-id-3433656.html 當我們編寫gtk/glade程序,gcc編譯時,用如下命令: #gcc -o server server.c pkg-config --cflags --libs gtk-2.0 報錯:/tmp/ccoXadAd.o: In function …

Android 第十五課 如何使用LitePal從SQLite數據庫中刪除數據(十四課用來保留講解如何向SQLite數據庫中存入數據)

使用LitePal刪除數據的方式主要有兩種,第一種就是直接調用已存對象的delete()方法,所謂已存儲對象就是調用過save()方法的對象,或者說是通過LitePal提供的查詢API查出來的對象,都是可以直接使用delete方法來刪除對象的。這是比較簡…

頁面返回頂部(方法比較)

下面就說下簡單的返回頂部效果的代碼實現&#xff0c;附注釋說明。 1. 最簡單的靜態返回頂部&#xff0c;點擊直接跳轉頁面頂部&#xff0c;常見于固定放置在頁面底部返回頂部功能 方法一&#xff1a;用命名錨點擊返回到頂部預設的id為top的元素 html代碼 <a href"#top…

Android 第十六課 使用LitePal查詢數據

LitePal在查詢API方面做了非常多的優化&#xff0c;基本上可以滿足絕大多數場景的查詢需求&#xff0c;并且代碼也十分整潔。 例如我們需要查詢表中的所有數據&#xff1a; List<books> DataSupport.findAll(Book.class); 沒有冗長的參數列表&#xff0c;只需要調用一下…

linux創建桌面圖標,和開始菜單欄圖標

轉自&#xff1a;http://blog.csdn.net/qq_25773973/article/details/50514767 ###環境&#xff1a;Mint17&#xff0c;&#xff08;其他類似的linux系統是一樣的&#xff09; 如果開始菜單有圖標&#xff0c;創建桌面圖標很簡單&#xff0c;右鍵添加到桌面即可。 如果沒有&am…

ScrollView中使用ListView

轉自 http://blog.csdn.net/fzh0803/article/details/7971391 由于scrollview和listview不能直接共存&#xff0c;在scrollview中直接使用lsitview的話只會顯示一個條目&#xff0c;要使他們共存&#xff0c; 據我所知&#xff0c;有三種方法&#xff1a; 1。如果listview的高度…

Android 第十四課 使用LitePal添加數據(更新數據)

我們注意到當你登錄一個app&#xff0c;是不是需要先注冊呢&#xff1f;&#xff0c;所謂注冊&#xff0c;簡單地來理解是不是就是把輸入框中地數據傳入數據庫中呢&#xff1f; 這里我們設置簡單一點&#xff0c;注冊的信息只包括兩項&#xff0c;一項是用戶名&#xff0c;另一…

微信公眾平臺的服務號和訂閱號

微信公眾平臺 服務號 訂閱號 作者&#xff1a;方倍工作室 地址&#xff1a;http://www.cnblogs.com/txw1958/p/ServiceNumber-subscriptionNumber.html 什么是服務號&#xff1f; 服務號給企業和組織提供更強大的業務服務與用戶管理能力&#xff0c;幫助企業快速實現全新的公眾…

Android 第十七課 碎片的簡單用法及動態添加碎片

Fragment(碎片)是一種可以嵌入在活動當中的UI片段&#xff0c;它可以讓程序更加合理和充分的利用大屏幕的空間。碎片和活動太像了&#xff0c;同樣都包含布局&#xff0c;都有自己的聲明周期&#xff0c;可以將碎片理解為一種迷你型的活動。 新建FragmentTest項目。假設項目已經…

在Linux下禁用鍵盤、鼠標、觸摸板(筆記本)等輸入設備

在Linux系統下禁用鍵盤、觸摸板、鼠標等輸入設備&#xff0c;可以通過xinput命令來實現&#xff1a;主要涉及&#xff1a;#xinput list#xinput list-props list-number#xinput set-prop list-number func-number 1/0具體操作如下&#xff1a;step1&#xff1a;查看系統中有那些…

委托又給我惹麻煩了————記委托鏈的取消注冊、獲取返回值

今天改bug碰到了一個問題&#xff0c;有多個方法注冊到了一個事件里去&#xff0c;而這些方法本身又有點兒互斥&#xff0c;因而造成了bug&#xff0c;哥調試半天才發現&#xff0c;郁悶至極&#xff0c;遂復習了以前的知識并進行適當延伸&#xff0c;再將成果記錄及分享之&…

Python第一課

對python仰慕已久&#xff0c;今日下定決心學習。可能我是一時頭腦發熱&#xff0c;但我還是愿意堅持。 先了解一下&#xff1a;命令行模式和Python交互模式 在Windows開始菜單選擇“命令提示符”&#xff0c;就進入到命令行模式&#xff0c;它的提示符類似C:\>&#xff1a;…

C++模板專門化與重載

最近在復習C有關知識&#xff0c;又重新看<<Effective C>>&#xff0c;收獲頗豐。原來以前看這邊書&#xff0c;好多地方都是淺嘗輒止。<<Effective C>>條款25&#xff1a;考慮寫出一個不拋出異常的swap函數&#xff0c;涉及到C模板專門化(Templates S…

Android 第十八課 強大的滾動控件 RecyclerView

步驟&#xff1a; 一、添加依賴庫compilecom.android.support:recyclerview-v7:26.1.0 二、在activity_mian.xml中&#xff0c;添加RecyclerView控件&#xff0c;并占據整個頁面。 三、把你要在RecyclerView中展示的內容&#xff0c;設置成一個實體類Fruit&#xff0c;接著為Re…

通過rtcwake命令設置系統S3(休眠到內存)/S4(掛起到硬盤)一段時間后自動喚醒

rtcwake -m disk -s 60 //S4&#xff08;掛起&#xff09;60秒后自動喚醒 rtcwake -m mem -s 60 //S3(休眠&#xff09;60秒后自動喚醒

電商首頁設計的時候,就應該考慮這個

如果有目的去找某一類商品的人幾乎都會從導航或搜索進去了&#xff0c;看首頁的一般是屬于那些還沒想好要買什么東西的人&#xff0c;這些人一般都是漫無目的的瞎逛&#xff0c;看在首頁有沒有特價的或便宜的東西被撿到。 轉載于:https://www.cnblogs.com/wangzong/p/3256555.h…