0

私はAndroidアプリケーションを作成しています。内部Fragmentには、ListViewと を使用して入力された がArrayAdapterありArrayListます。android.R.layout.simple_list_item_1リスト項目のレイアウトに使用しています。アイテムがクリックされると、そのデータに基づいてOnItemClickListener別のアイテムが表示されるように、 が必要です。Activity

問題は、同じ名前のアイテムが存在する可能性があることです。コードで各要素を区別できるように、各要素に ID 値を付けたいと思います。

リストの入力に使用するアイテムは、データを保持するためのカスタム クラスのものですが、ここで重要なフィールドは ID と名前 ( に示されていますListView) です。

を入力するための私のコードListView:

List<String> items;
ArrayAdapter<String> adapter;
List<MyCustomDataObject> listOfDataObjects;

...

// Get the ListView
ListView list = (ListView) layoutRootView.findViewById(R.id.listView1);
// Create the item List and the ArrayAdapter for it
items = new ArrayList<String>();
adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items);
// Set the list adapter
list.setAdapter(adapter);
// Add the data items
for (MyCustomDataObject obj : listOfDataObjects) {
    items.add(obj.name);
}
items.add(getResources().getString(R.string.no_items));
// Create the item click listener
list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // Open the Activity based on the item
    }
});

各項目を識別するためにリスト項目に ID を追加するにはどうすればよいですか?

4

2 に答える 2

2

解決策は実際には非常に簡単です。

ListViewから にデータを入力していますList。はListアイテムの順序付きコレクションであるため、 のデータソースとして追加すると、ListView各アイテムのインデックスが常にわかります。

したがって、アイテムを選択すると、クリックさListViewれた位置が取得されます。Viewこの位置は、 の位置に対応しますList

のフィールドは実際には必要ありませんが、もちろん、のidフィールドにデータを入力するときは、通常の for ループ (拡張されていない) を使用し、インデックスを使用して各 の id を設定できます。MyCustomDataObjectListMyCustomDataObjectMyCustomDataObject

于 2013-09-08T22:07:13.857 に答える