2011-11-13 6 views
0

私はチェックボックス付きの異なるリストビューを持つアプリを持っています:それらはCursorAdapterで設定されています。 ユーザーはアイテムをチェック/チェック解除することができ、アイテムはツリーセットに保存されます。 最後のアクティビティは単純なリストビューで、TreeSetからデータを読み取ります。アダプタの内容は変更されましたが、ListViewは通知を受け取りませんでした

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

最後のリストビューで要素をソートする必要があるため、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自体であると思われます。それは、それが内部の要素の順序を(予想通りに)変更しているため、最後のアクティビティのアダプタが不平を言っています。 (私は他のリストビューに/チェックを外し素子をチェックすると、それが発生する)

IはCalcoloAdapter.onResume()、 内部notifyDataSetChanghed()を使用しようとしたが、エラーがその前に来ています。

どうすればこの問題を回避できますか?

答えて

2

このUIスレッド以外のスレッドからアダプタ/ ListViewを変更しようとすると、この問題が発生します。 so onあなたが新しいスレッドでいくつかのことをやっているなら、Check/unckeckしてください。そうすれば、アダプタ関連の作業はUIスレッドでのみ行うべきです。 これにはAsyncTask,HandlerまたはRunOnUITHreadを使用してください。

関連する問題