0

我正在使用不同的方法Thread来清除适配器List,有时我会得到一个IndexOutOfBoundsException.

我想问题是在自定义适配器填充过程的中间某处ListView,第二个线程调用list.clear()导致list.size()返回 0,导致某处越界。

如何通过同步使这个线程安全(如果这可以解决它)?

//onCreate
fillList(list);  // fills the list
new AsyncTaskSubclass().execute(); // clear the list on a different Thread

编辑:我认为问题AsyncTask在于清除ArrayAdapter子类使用的列表,有没有办法改变List适配器使用的?

4

2 回答 2

1

您可以使用同步列表:

List<Item> list = Collections.synchronizedList(new ArrayList<Item>());
于 2013-07-22T20:28:55.053 回答
0

有更多的代码会很好。

如果使用 anAsyncTask你应该在你想清除丢失时调用publishProgress()你的方法,然后在(或) 中执行此清除。您应该避免从 UI 线程外部操作 UI 元素。doInBackground()onProgressUpdate()add()remove()

为什么不使用新列表设置新适配器?因此,您异步烹制您的列表,然后ListView.setAdapter()在 UI 线程中调用(例如 inonProgressUpdate()onPostExecute())。

于 2013-07-23T01:13:24.103 回答