我正在进行网络呼叫,然后一旦网络呼叫完成检索信息,我想调用notifyDataSetChanged。如果它都在同一个线程上,那么这是有效的,但如果更新发生在另一个线程中,我将如何更新列表呢?
**
会抛出此错误:
android.view.ViewRootImpl$CalledFromWrongThreadException:
Only the original thread that created a view hierarchy can touch its views.
答案 0 :(得分:1)
您可以使用AsyncTask在单独的线程上执行网络操作。您从UI线程启动AsyncTask,任务本身将在一个单独的线程上运行。当AsyncTask完成后,AsyncTask的onPostExecute方法将再次在UI线程上运行,您可以从中调用notifyDataSetChanged()方法。
Here's some useful info on AsyncTask in the Android developer docs
答案 1 :(得分:1)
你应该使用一个处理程序。 声明你的适配器就像类的一个属性(在任何方法之外)。 并在您的活动中使用此代码:
public Handler updateAdapter = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg)
{
//Update code
}
});
你线程中的这个(调用处理程序):
updateCode.sendEmptyMessage(0);