listview中的Illegalstateexception

时间:2011-03-23 11:55:24

标签: android

在我的listview中,我填充来自后台线程的数据,我也称为notifydatasetchanged(),它仍然给出了例外。任何人都有解决方案。

5 个答案:

答案 0 :(得分:1)

制作另一个arraylist并执行所有处理,例如在其上添加和删除数据,并且在所有操作之后只需将该arraylist的所有数据复制到您已提供给阵列适配器的arraylist中,因此aa将不会给出你是非法的例外。

答案 1 :(得分:0)

非法状态异常意味着您认为您使用的线程未正确处理.. 你可以发布你的代码..所以可以找到发生确切异常的地方

答案 2 :(得分:0)

如果要确保数据集更改通知仅在完成线程后完成,则在运行线程使用处理程序时并在handler.postdelayed中执行notifydatasetchanged()命令。

答案 3 :(得分:0)

我认为其他两个回答者[必须有一个更好的说法]有点打击它,但希望我能更清楚:

  • 您必须从UI线程中调用notifyDatasetChanged:您不是,这就是您看到异常的原因
  • 所以你需要做的就是在后台线程中填充光标
  • 然后在完成后从处理程序更新UI

我建议使用AsyncTask,因为如果你刚刚开始它会让线程处理更容易:

  • 将光标填入doInBackground然后
  • onPostExecute方法调用中adapter.notifyDatasetChangedonPostExecute 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
    }     
});