0

我正在创建一个 Android 应用程序。在 aFragment我有一个ListView使用 anArrayAdapter和 an填充的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

解决方案其实很简单。

您正在ListViewList. List是项目的有序集合,因此在将其添加为数据源时,您ListView将始终知道每个项目的索引。

因此,当从中选择一个项目时,ListView您将获得View点击的位置。该位置将对应于您在List.

您实际上并不需要id您的字段MyCustomDataObject,但是当您填充您的字段时,您当然List可以MyCustomDataObject使用普通的 for 循环(未增强)并使用索引来设置每个 的 id MyCustomDataObject

于 2013-09-08T22:07:13.857 回答
1

在 listOfDataObjects 中查找位置以找到 ID:

// Create the item click listener
list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if (position==listOfDataObjects.size()) {   .... no_items clicked ... }
        else {
          MyCustomDataObject obj = listOfDataObjects.get(position);
          ... // Open the Activity based on the item
        }
    }
});
于 2013-09-08T22:43:02.417 回答