ListActivity刷新数据后界面无法更新的解决

        之前遇到ListActivity数据更新后界面却没更新的问题。当时是直接重新跳转到这个Activity解决的,因为之前的操作

 

大多是跳转到一个新的界面对ListActivity的数据进行操作后再重新回来,因此用户不会发现有什么不同。今天遇到要直接

 

在ListActivity里对数据进行操作更新界面,再次遇到数据更新后界面却没更新的问题。查了一些资料后解决了。

 

如果使用ArrayAdapter,那么就不要再对ArrayAdapter中封装的List进行数据操作了,这样是没用ArrayAdapter

 

有类似add()、clear()等方法操作数据,然后用arrayAdapter.notifyDataSetChanged()和

 

ListActivity.setListAdapter(arrayAdapter)更新数据。如果使用CursorAdapter对应可执行cursor的requery()。

 

 

之后就打算开一个线程更新数据然后关闭之前打开的ProgressDialog。结果报了异常:

 

android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view

 

hierarchy can touch its views.意思是说自定义的线程不能更新ui,只能在主线程里更新ui。

 

 

解决方法有两种:

 

1.在Activity.onCreate(Bundle savedInstanceState)中创建一个Handler类的实

 

例,重写Handler类的handleMessage方法,在其中调用更新界面显示的函数。

 

2.利用Activity.runOnUiThread(Runnable),将更新函数写在Runnable的run方法

 

中。

 

这样问题就解决了。


 

你可能感兴趣的:(thread,UI,android)