私はactivity
にListViewを持っていますが、最初はAdapter
に設定されています。その後、特定のボタンをクリックした後、私は単にlistView.setAdapter(new DifferentAdapter(this, foo));
私のアダプターの内容を変更する
と呼んでいます。 UIが更新され、すべて正常です。すると結局、それがクラッシュすると、ログは私にこのことを示しています
E/AndroidRuntime(29724): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2, class android.widget.ListView) with Adapter(class android.widget.HeaderViewListAdapter)]
私は推測している、それは単にsetAdapter
()はいつでも好きなときに呼び出すことがそれほど単純ではありません。 notifyDataSetChanged
などが必要ですか?問題がある場合は、ListActivity
を使用していません。下から
EDIT
明確化:それは非常に簡単です。アクティビティには2つの内部クラスがあり、それぞれBaseAdapterを継承しています。だから私は2つの異なるアダプタを持っています、そして、ある時点で、私は単に別のアダプタを使用するようにListViewを切り替えるだけです。
あなたの活動の任意のスレッドやAsyncTaskを使用していて、バックグラウンドで、あなたはsetAdapterしようとしていますか? – sat
@sat。いいえ、それはかなり簡単です。アクティビティには2つの内部クラスがあり、それぞれBaseAdapterを継承しています。だから私は2つの異なるアダプタを持っています、そして、ある時点で、私は単に別のアダプタを使用するようにListViewを切り替えるだけです。 – LuxuryMode
あなたが切り替えるポイントは重要かもしれません。 2回目にアダプターを設定する前に、notifyDataSetChanged()を使用してアダプターを設定してください。 – sat