4

私は Android 開発に不慣れで、Commonsware の「The Busy Coder's Guide to Android Development」で読んだ抜粋について質問がありました。ListActivity を拡張するクラスを構築し、コンテキスト メニューを介してリストから削除および削除する機能を示す例があります。リストの文字列のソースを使用して ArrayAdapter を設定する前に、「リストの内容をオンザフライで変更できるようにしたいので、文字列配列を ArrayList 型に変換するように」とテキストに記載されています。通常の String 配列ではなく ArrayList を使用すると簡単です"

ArrayList または String 配列を使用してリストを直接操作していた場合、この概念は理解できますが、ArrayAdapter.add/insert/remove メソッドを使用している場合、なぜそれが問題になるのでしょうか? ArrayAdapter が作成されると (そして、その .java ファイルから理解できることから)、ソース データが配列または ArrayList から取得されたかどうかにかかわらず、ソース データが List オブジェクトに変換されます。

アダプターを作成するときに通常の配列を使用してみましたが、エラーが発生しました (テキストに記載されているとおり) が、理由がわかりません。文字列配列を使用して ArrayAdapter を作成する場合と ArrayList を作成する場合の違いは何ですか?とにかく同じ List オブジェクトに変換されませんか? アダプターを介して追加/挿入/削除しようとすると、元のソース変数に何らかの結び付きがありますか?

長い質問で申し訳ありませんが、よろしくお願いします。

4

1 に答える 1

3

元の配列/配列リストを変更できます。次に、アダプターで notifyDataSetChanged() を呼び出すと、リストが新しい情報で更新されます。ArrayList を使用すると、通常のすべての操作を使用して、通常の文字列配列では実行できない任意のインデックスでデータを挿入/削除できます。そのため、ListView の内容は元のデータ ソースに大きく結び付けられています。myListView.setAdapter() を呼び出した時点では、内容はアダプターによって修正されません。ただし、add、remove、insert などのメソッドを配列で使用しようとすると、このように配列を使用できないため、エラーが発生します。ArrayAdapter は実際には String 配列を AbstractList オブジェクトに変換しますが、これは変更できません。

于 2011-01-25T15:08:58.870 に答える