在我的listview中,我填充来自后台线程的数据,我也称为notifydatasetchanged(),它仍然给出了例外。任何人都有解决方案。
答案 0 :(得分:1)
制作另一个arraylist并执行所有处理,例如在其上添加和删除数据,并且在所有操作之后只需将该arraylist的所有数据复制到您已提供给阵列适配器的arraylist中,因此aa将不会给出你是非法的例外。
答案 1 :(得分:0)
非法状态异常意味着您认为您使用的线程未正确处理.. 你可以发布你的代码..所以可以找到发生确切异常的地方
答案 2 :(得分:0)
如果要确保数据集更改通知仅在完成线程后完成,则在运行线程使用处理程序时并在handler.postdelayed中执行notifydatasetchanged()命令。
答案 3 :(得分:0)
我认为其他两个回答者[必须有一个更好的说法]有点打击它,但希望我能更清楚:
notifyDatasetChanged
:您不是,这就是您看到异常的原因我建议使用AsyncTask,因为如果你刚刚开始它会让线程处理更容易:
doInBackground
然后onPostExecute
方法调用中adapter.notifyDatasetChanged
(onPostExecute
onPreExecute
方法AsyncTask
自动在UI线程上运行,让您的生活轻松自如。 答案 4 :(得分:0)
如果您可以参加活动,可以使用
getActivity().runOnUiThread(new Runnable() {
public void run(){
// update your dataset and call notifydatasetchanged() here
}
});
如果没有,
Handler mHandler = new Handler();
mHandler.post(new Runnable() {
public void run(){
// update your dataset and call notifydatasetchanged() here
}
});