【问题标题】:Adding custom data to ListView & ArrayAdapter items将自定义数据添加到 ListView 和 ArrayAdapter 项
【发布时间】:2013-09-08 15:08:46
【问题描述】:

我正在创建一个 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 以识别每个项?

【问题讨论】:

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


    【解决方案1】:

    解决方案其实很简单。

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

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

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

    【讨论】:

      【解决方案2】:

      在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
              }
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-20
        • 1970-01-01
        • 1970-01-01
        • 2015-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多