web-dev-qa-db-ja.com

単純なリストビューを作成するためのAndroidのArrayAdapter

AndroidでActivityを作成しようとしましたが、このアクティビティにはListViewのみが含まれています。

リストビューを埋めるために知っているように、ArrayAdapterを使用する必要があります。

ArrayAdapterを理解するために、次のリンクを読みました。

http://developer.Android.com/reference/Android/widget/ArrayAdapter.html

しかし、それでもはっきりと理解できません!

最大の疑問の1つは、アクティビティにTextViewがないのにコンストラクタがTextViewリソースIDを必要とする理由です。

これが唯一のコンストラクターであると言っているのではなく、その背後にあるロジックを理解できないというだけです。

簡単なリストビューを作成するために、次のリンクも参照しました。

ArrayAdapterの例を使用した単純なリストビュー

しかし、再び私の主な疑問は、それがTextViewリソースIDを必要とする理由ですか?

誰かが例でそれを説明できるなら、それは非常に役立ちます。

編集:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
          Android.R.layout.simple_list_item_1, Android.R.id.text1, values);
61
Nirav Kamani

ArrayAdapterはTextViewを使用して、その中の各アイテムを表示します。舞台裏では、保持する各オブジェクトのtoString()メソッドを使用し、これをTextView内に表示します。 ArrayAdapter には、使用できるコンストラクターがいくつかあります。例で使用したコンストラクターは次のとおりです。

ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)

デフォルトでは、ArrayAdapterはデフォルトのTextViewを使用して各アイテムを表示します。ただし、必要に応じて、独自のTextViewを作成し、TextViewクラスを拡張することで、必要な複雑なデザインを実装できます。次に、これを使用するためにレイアウトに移動する必要があります。 textViewResourceIdフィールドでこれを参照して、デフォルトではなくこのビューにオブジェクトをバインドできます。

あなたの使用のために、コンストラクタを使用することをお勧めします:

ArrayAdapter(Context context, int resource, T[] objects). 

あなたの場合、これは次のようになります:

ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, values)

そしてそれは問題ないはずです。これにより、各文字列がデフォルトのTextViewディスプレイ-シンプルでシンプルな白い背景にバインドされます。

したがって、質問に答えるために、textViewResourceIdを使用する必要はありません。

70
ucsunil

しかし、再び必要なのはなぜTextViewリソースIDが必要なのでしょうか?

コンストラクターとパラメーターを見てください。

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

APIレベル1コンストラクターに追加

パラメーター

context現在のコンテキスト。

resourceビューをインスタンス化するときに使用するレイアウトを含むレイアウトファイルのリソースID。

textViewResourceId移入されるレイアウトリソース内のTextViewのIDオブジェクトListViewで表すオブジェクト。

Android.R.id.text1は、Androidリソース内のテキストのIDを参照します。だから、あなたはあなたの活動にある必要はありません。

全リストはこちら

http://developer.Android.com/reference/Android/R.id.html

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        Android.R.layout.simple_list_item_1, Android.R.id.text1, values);

thisはアクティビティコンテキストを参照します

Android.R.layout.simple_list_item_1 simple_list_item_1は、Android.R.layoutのレイアウトです。

Android.R.id.text1はAndroidリソースIDを参照します。

valuesは、指定したリンクからの文字列配列です

http://developer.Android.com/reference/Android/R.layout.html

21
Raghunandan
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

ここで、リソースとは、ビューをインスタンス化するときに使用しているレイアウトの「ID」を意味します。

現在、このレイアウトには独自のIDを持つ多くの子ビューがあります。したがって、textViewResourceIdは、データを取り込む必要がある子ビューを示します。

3
Prashant K

必要なTextViewリソースIDはTextViewレイアウトファイル用であるため、同じアクティビティにはありません。

[ファイル]> [新規]> [XML]> [XMLレイアウトファイル]に移動して作成し、ルートタグフィールドに「TextView」というウィジェットタイプを入力します。

ソース: https://www.kompulsa.com/the-simplest-way-to-implement-an-Android-listview/

2
Nicholas Brown
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

私はAndroidも初めてなので、間違っているかもしれません。しかし、これをリストビューの作成に使用する際の私の理解では、2番目の引数はリストアイテムのレイアウトです。レイアウトは、多くのビュー(画像ビュー、テキストビューなど)で構成されます。 3番目の引数では、テキストを表示するビューまたはテキストビューを指定します。

2
Anuj Mahajan

Textviewにidを使用する必要はありません。 Android arrayadapter から詳細を確認できます。以下のコードは、arrayadapterを初期化します。

ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.single_item, eatables);
1
Rajat Ghai

あなたの質問の答えはAndroid.R.id.text1はintです:配置されるレイアウトリソース内のTextViewのIDです。

ArrayAdapterには、引数の数が異なる非常に多くのコンストラクターがあります

ArrayAdapter(Context context, int resource)
ArrayAdapter(Context context, int resource, int textViewResourceId)
ArrayAdapter(Context context, int resource, T[] objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
ArrayAdapter(Context context, int resource, List<T> objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

これで、コンストラクターがそれぞれ異なり、異なる引数リストを使用したことが理解できます。

そして簡単な答えは、ArrayAdapterをターゲットxmlファイル内のテキストビューで使用しても使用しなくても使用できることです。関係ありません。また、テキストビューIDを指定する必要はありません。指定することなく使用できます。ただし、単純なリストビューでは高度なオプションを使用する必要がある場合があります。テキストビューで使用する必要があります。

ここにサンプルの例

ArrayAdapter adapter = new ArrayAdapter<String>(this,R.layout.ListView,StringArray);
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);

これは、より明確に使用できる有効なコードでもあります。

レイアウトファイルAndroid.R.layout.simple_list_item_1に複数のビューがある場合、3番目の引数Android.R.id.text1を渡して、配列要素(値)で満たされるビューを指定する必要があります。ただし、レイアウトファイルにビューが1つしかない場合は、3番目の引数を指定する必要はありません。

0
Himanshu Singh