2012-03-26 9 views
29

複数のアクティビティを作成する代わりに、必要に応じてListViewArrayAdapterを変更したいと思います。 setAdapter()を複数回電話するかどうかについては、APIには何の言及もありません。ListViewのアダプタを動的に変更することはできますか?

より具体的には、ListViewのアクティビティを開始したいとします。この例では、ListViewは、listView.setAdapter(this)で、たとえばCategoryArrayAdapterから初期化されています。

次に、ユーザーがカテゴリを選択します。新しいアクティビティを開始せずに、コードは同じListViewの新しいアダプタを設定します。新しいアダプタ、たとえばItemArrayAdapterlistView.setAdapter(this)と呼ばれます。

誰かがこれをうまくやった経験があるのですか、これが行われるべきではない特定の理由を知っていますか?

答えて

30

setAdapter()を複数回呼び出すことは大丈夫かどうか、APIには何の言及もありません。

簡単な答えはYESです。私はこれまで同様のことをしています。

これは、Adapterが存在し、APIで提供されている理由です。それぞれのリストアイテムの実際のコンテンツ(Model)とレンダリング(View)は、android.widget.AdapterViewに直接バインドされるのではなく、android.widget.Adapter内で分離されて実装されます。アダプタが適切に実装されている限り、setAdapter()メソッドを呼び出すだけで、リストビューにバインドされた実際の基になるアダプタを交換/変更できます。

1

アダプターのリセットは問題ありませんが、アダプターが変更されているビューは新しいデータで再描画する必要があるため、GUIグリッチが発生する可能性があることに注意してください。これとは別に、あなたは大丈夫でしょう。

+0

これまでにこれを行いましたか? –

+0

@JeffAxelrod:はい、私はそれをしました。 – Bondax

関連する問題