web-dev-qa-db-ja.com

ListViewのアダプタを動的に変更しても大丈夫ですか?

複数のアクティビティを作成する代わりに、必要に応じてArrayAdapterListViewを変更したいと思います。 [〜#〜] api [〜#〜] に、setAdapter()を複数回呼び出しても問題ないかどうかについての言及はありません。

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

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

誰かがこれを成功させた経験がありますか、またはこれが行われるべきではない特定の理由を知っていますか?

31
Jeff Axelrod

SetAdapter()を複数回呼び出しても問題ないかどうかについての言及はAPIにありません。

簡単な答えは「はい」です。私は以前に同様のことをしました。

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

31
yorkw

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

1
Bondax