java - 将自定义数据添加到 ListView 和 ArrayAdapter 项目

标签 java android android-listview android-arrayadapter onitemclicklistener

我正在创建一个 Android 应用程序。在 Fragment 内,我有一个 ListView,它使用 ArrayAdapterArrayList 填充。我使用 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 填充 ListViewList 是项目的有序集合,因此将其添加为 ListView 的数据源时,您将始终知道每个项目的索引。

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

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

关于java - 将自定义数据添加到 ListView 和 ArrayAdapter 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18685232/

相关文章:

Java 子类重载不会从父类(super class)调用

java - 使用哪种布局以及如何使用?

java - 获取 child 的名字以及 Firebase 数据库中的值

android - 警报管理器不工作

android - 在android中显示gif

Android - 我怎么知道 gridview 何时到达底部?

java - ObjectInputStream 无效流 header : 00000000

java - RabbitMQ + Reactor,传递消息后发送ACK?

android - 有没有办法让ListView的滚动条一直显示?

android - ListView 选中的项目不可见