[英]Android How Do I Call RecyclerVIew notifyDataSetChanged() after ThreadPoolExecutor finishes?
[英]How do I notifyDataSetChanged in ArrayAdapter inside a callback on a different thread? - Android
我正在進行網絡通話,然后在完成網絡通話檢索信息后,我想致電notifyDataSetChanged。 如果所有線程都在同一線程上,則此方法有效,但是如果更新發生在另一個線程中,我將如何更新列表?
**
它將拋出此錯誤:
android.view.ViewRootImpl$CalledFromWrongThreadException:
Only the original thread that created a view hierarchy can touch its views.
您可以使用AsyncTask在單獨的線程上執行網絡操作。 您從UI線程啟動AsyncTask,任務本身將在單獨的線程上運行。 完成AsyncTask后,AsyncTask的onPostExecute方法將再次在UI線程上運行,您可以從該UI線程調用notifyDataSetChanged()方法。
您應該使用處理程序。 像類的屬性一樣聲明適配器(在任何方法之外)。 並在您的活動中使用以下代碼:
public Handler updateAdapter = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg)
{
//Update code
}
});
而這在您的線程中(調用處理程序):
updateCode.sendEmptyMessage(0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.