2011-01-25 6 views
3

私はAndroidの開発には新しく、Commonswareの「The Busy Coder's Guide to Android Development」の抜粋についての質問がありました。 ListActivityを継承するクラスを構築し、コンテキストメニューを使用してリストから削除および削除する機能を示す例があります。リストの文字列のソースを持つArrayAdapterを設定する前に、テキストはString配列をArrayList型に変換するように指示しています。「リストの内容を即座に変更できるようにするために、通常のString配列ではなくArrayListを使用すると簡単です。 "Android Development - ArrayListを使用する<String>とArrayAdapterを使用した文字列の配列

私はこのリストを直接操作するためにArrayListまたはString配列を使用していましたが、ArrayAdapter.add/insert/removeメソッド? ArrayAdapterが作成されると(その.javaファイルからわかるように)、ArrayまたはArrayListから来ているかどうかにかかわらず、ソースデータをListオブジェクトに変換します。

アダプターを作成するときに通常の配列を使用しようとしましたが、エラーが発生しました(テキストが示す通り期待通りですが)。理由はわかりません。 ArrayAdapterとArrayListの作成とArrayListの作成の違いは...それは同じリストオブジェクトに変換されません。アダプタを追加/挿入/削除しようとしているときに元のソース変数に何らかの形で結びついていますか?

申し訳ありませんが長い質問のために、事前に感謝します。

答えて

3

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

+0

迅速な対応をありがとう!私はそれが少し明確になっていると思う。しかし、私は配列やArrayListを直接変更していないという事実はまだわかりません...私はアダプタを変更しています(元のソースから作成された独自のListにadd/insertを呼び出すと思います)。 ArrayAdapterは、配列が提供されているときにArray.asList()が使用されていることを確認しました.Listオブジェクトに対する変更は、そのリストの変更が元の配列に書き戻しを試みることを意味します。だから私は、アダプタでaddを呼び出すと、間接的に元の配列のaddを呼び出そうとします。 –

関連する問題