2011-05-06 14 views
0

我的工作tabHost与4 tabwidget,我的所有四个标签控件具有listActivity,显示从JSON解析bean类设定不同的ArrayList对象的产品清单..android listview错误....适配器不应该从后台线程设置....!

现在,应用程序正在F9但,,,大约五分之一的时间比例,它显示异常,我的适配器被重置,但listView无法显示数据,因为适配器是从后台线程设置的。

我不能提供从相同的UI线程适配器数据b'coz我bean类和数据管理的定义别的地方....

我用adapter.notifyDataSetChanged(),其中需要...
请不要认为...

与问候,

Arpit

回答

3

即使事情都定义了一些别的地方,你应该仍然能够使用设置适配器:

runOnUiThread(new Runnable() { 

@Override 
     public void run() { 
      list.setAdapter(adapter); 
     } 
}); 

或简单地发布可运行到UI线程:

view.post(new Runnable() { 

    @Override 
    public void run() { 
     list.setAdapter(adapter); 
    } 
}); 

希望这有助于克里斯托弗

2

我建议使用Handler(http://developer.android.com /reference/android/os/Handler.html)对适配器执行所有更改:为每个活动创建一个Handler实例,然后发送一个Message(http://developer.android.com/reference/android/os/Message。 html)从数据管理器/ bean类与该列表ada的新数据添加到该处理程序PTER。然后,您可以安全地从Handler更新适配器,因为它将在UI线程上执行其工作。

简短的文章在这里:http://www.tutorialforandroid.com/2009/01/using-handler-in-android.html,还有一些关于SO的其他问题来描述它。