将自定义数据添加到ListView& ArrayAdapter项目

时间:2013-09-08 15:08:46

标签: java android android-listview android-arrayadapter onitemclicklistener

我正在创建一个Android应用程序。在Fragment内,我使用ListViewArrayAdapter填充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以识别每个项目?

2 个答案:

答案 0 :(得分:2)

实际上解决方案很简单。

您正在填充ListView中的ListList是一个有序的项集合,因此当将其添加为ListView的数据源时,您将始终知道每个项目的索引。

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

您真的不需要id的{​​{1}}字段,但当您填充MyCustomDataObject的{​​{1}}时,您可以使用正常的for循环(未增强)并使用索引设置每个List的ID。

答案 1 :(得分: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
        }
    }
});