アダプタの内容は変更されましたが、ListViewは通知を受信しませんでした

チェックボックス付きの異なるリストビューを持つアプリがあります。それらにはCursorAdapterが設定されています。
ユーザーはアイテムをチェック/チェック解除することができ、アイテムはツリーセットに保存されます。
最後のアクティビティは単純なリストビューで、TreeSetからデータを読み込みます。

アクティビティはタブで整理されています。

最後のリストビューで要素をソートする必要があったため、TreesSetが選択されました。

問題は、時々、私はこのエラーが発生することです:

11-13
06:58:51.068:E/AndroidRuntime(1870):java.lang.IllegalStateException:アダプターの内容は変更されましたが、ListViewは通知を受け取りませんでした。アダプタの内容がバックグラウンドスレッドから変更されていないことを確認し、UIスレッドからのみ変更してください。
[アダプタ(クラスorg.boggix.adapter.CalcoloAdapter)を持つListView(2131099669、クラスandroid.widget.ListView)]

「CalcoloAdapter」は最後のアクティビティのアダプタです。

私は問題がTreeSet自体であると考えています。それは内部の要素の順序を(予想どおり)変更しているため、最後のアクティビティのアダプタがそれに不平を言っています。

CalcoloAdapter.onResume()内でnotifyDataSetChanghed()を使用しようとしましたが、
それ以前にエラーが発生しています(他のリストビューの要素をチェック/チェック解除すると発生します)。

どうすればこれを避けることができますか?

ベストアンサー

そのUIスレッド以外のスレッドからアダプタ/ ListViewを変更する試みがこの問題を引き起こす。
あなたが新しいスレッドでいくつかのことをやっているなら、Check/unckeckを実行してください。そして、アダプタ関連の作業はUIスレッドでのみ行うべきです。
このためには、 AsyncTaskHandler または
RunOnUITHread を使用します。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です