Android:线程从networking加载数据后更新列表视图

  1. 我喜欢我的GUI在用户启动应用程序时立即出现。
  2. 然后一些数据(文字,图片)被加载到背景中(如YouTube应用程序)。
  3. ListView和Gallery会自动更新这个新的数据。

我启动我的ListView,启动一个线程并加载数据…然后ListView不会更新! 有几个人告诉我应该使用notifyDataSetChanged() 。 但我不能把这个命令放在我的线程(只是未知)。

有任何想法吗?

Solutions Collecting From Web of "Android:线程从networking加载数据后更新列表视图"

我也有同样的问题,当我遇到这个问题时,我感到很兴奋。 但没有答案? 🙁

之后,让问题坐了两个星期,我在这里find了解决办法 :

长话短说:

从上面的链接引用:

我们必须使用Handler对象,因为我们无法在单独的线程中更新大多数UI对象。 当我们向Handler发送消息时,它将被保存到一个队列中,并尽快由UI线程执行。

一旦你看看你看到的代码,得到作者的意思。
注:即使有一个处理程序,Android可能不会让您从线程的run()方法更新视图对象。 我得到这个错误:

 05-31 02:12:17.064: ERROR/AndroidRuntime(881): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 

为了解决这个问题,我更新了run()方法中的数据数组,并使用该数组更新处理程序的handleMessage()方法中的视图。

我希望这可以帮助其他人。

您可以使用slowAdapter来刷新视图:

 SlowAdapter = new SlowAdapter(this); list.setAdapter(SlowAdapter); SlowAdapter.notifyDataSetChanged(); 

在阅读这篇文章的时候自己find了,并尝试了一下。

短: AsyncTask的方法onProgressUpdate可以触摸视图 : http : //developer.android.com/reference/android/os/AsyncTask.html#onProgressUpdate(Progress …)

背景:我需要调用我的游标的查询,以便在任务填充数据库时不断更新ListView。 在doInBackground中进行的请求调用失败,提到了CalledFromWrongThreadException,但是onProgressUpdate中的相同代码却起作用。