0

Threadアダプターをクリアするために別のものを使用していListますが、IndexOutOfBoundsException.

問題は、カスタム アダプタが を埋めるプロセスの途中でListView、2 番目のスレッド呼び出し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

0

もう少しコードがあると良いです。

を使用している場合は、失われたものをクリアしたいときにメソッドAsyncTaskを呼び出しpublishProgress()てから、 (または) でこれをクリアする必要があります。UI スレッドの外部から UI 要素を操作することは避けてください。doInBackground()onProgressUpdate()add()remove()

そして、新しいリストで新しいアダプターを設定してみませんか? ListView.setAdapter()したがって、リストを非同期的にクックしてから、UI スレッドを呼び出します(例:onProgressUpdate()またはonPostExecute())。

于 2013-07-23T01:13:24.103 に答える