我正在创建一个 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 以识别每个项目?
最佳答案
解决方案其实很简单。
您正在从 List
填充 ListView
。 List
是项目的有序集合,因此将其添加为 ListView
的数据源时,您将始终知道每个项目的索引。
因此,当从 ListView
中选择一个项目时,您将获得单击的 View
的位置。该位置将对应于您的列表
中的位置。
您实际上并不需要 MyCustomDataObject
的 id
字段,但当然当您填充 MyCustomDataObject 的
您可以使用普通的 for 循环(未增强)并使用索引来设置每个 List
时MyCustomDataObject
的 id。
关于java - 将自定义数据添加到 ListView 和 ArrayAdapter 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18685232/