2011-08-03 7 views
0

私は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を切り替えるだけです。

+1

あなたの活動の任意のスレッドやAsyncTaskを使用していて、バックグラウンドで、あなたはsetAdapterしようとしていますか? – sat

+0

@sat。いいえ、それはかなり簡単です。アクティビティには2つの内部クラスがあり、それぞれBaseAdapterを継承しています。だから私は2つの異なるアダプタを持っています、そして、ある時点で、私は単に別のアダプタを使用するようにListViewを切り替えるだけです。 – LuxuryMode

+0

あなたが切り替えるポイントは重要かもしれません。 2回目にアダプターを設定する前に、notifyDataSetChanged()を使用してアダプターを設定してください。 – sat

答えて

0

どうやらこれが正常に動作します:

listView.setVisibility(View.GONE); 
listView.setAdapter(new MyAdapter(MyActivity.this, mList)); 
listView.setVisibility(View.VISIBLE); 
+0

新しいアダプタの作成は非常に悪いですdesigion –