【问题标题】:Android ListView: get item's position from its value?Android ListView:从其值获取项目的位置?
【发布时间】:2015-02-16 13:33:16
【问题描述】:

我是 Android 和 Java 新手。我想知道是否有办法通过值来查找 ListView 项的位置。

例如:
如果我的 ListView 中有一个项目显示字符串“Product 1108”,我将如何获得“Product 1108”的位置?

private void updateListView() {
    final ListView lvCheckList = (ListView) findViewById(R.id.lvCheckList);
    Map<String, ?> keys = checkListData.getAll();

    ArrayList<String> checkListStrings = new ArrayList<String>();
    for (Map.Entry<String, ?> entry : keys.entrySet()) {
            if (entry.getKey().equals(currentList + entry.getValue())) {
                checkListStrings.add((String) entry.getValue());
            }
            if (entry.getKey().equals(currentList + entry.getValue() + "Checked")) {
                //set Item to checked / unchecked

            }
        }

        ArrayAdapter<String> checkListArrayAdapter = new ArrayAdapter<String>(
                this, android.R.layout.simple_list_item_checked,
                checkListStrings);
                lvCheckList.setAdapter(checkListArrayAdapter);  
                }

此代码获取存储在 SharedPreferences 中的项目并将它们显示在 ListView 中。不要问我为什么它有效,它就是有效。

现在看到这一行:

if (entry.getKey().equals(currentList + entry.getValue() + "Checked")) {
                //set Item to checked / unchecked
    }

我想要在这里发生的是将列表项设置为选中或未选中,但我认为这不可能,因为尚未填充列表视图。因此,在 ArrayAdapter 中,我需要对列表视图的项目进行排序,找到具有我要查找的任何值的项目,并获取该项目的位置,以便我可以使用以下代码:

lvCheckList.setItemChecked(position, value);

希望这是有道理的。

【问题讨论】:

  • 你是如何获得价值的?
  • 值是从 SharedPreferences 加载的。
  • 为什么需要它? (我不知道你可以在什么情况下知道显示值但你没有同时拥有位置)

标签: android listview


【解决方案1】:

如果你有一个BaseAdapter,你应该有一个类似ArrayList 存储项目的东西,你可以使用indexOf(obj) 方法。

如果您使用的是ArrayAdapter,您可以使用getPosition(obj);

这是一个循环 ArrayAdapter 的示例(如果您使用其他内容,请告诉我):

ArrayAdapter adapter = new YourCustomArrayAdapter();
for(int i = 0; i < adapter.getCount(); i++)
    System.out.println(String.format("String \"%s\" has an index of %d", adapter.getItem(i), i);

这不使用getPosition() 方法,因为我们的循环为我们提供了一个位置,我们从中获取项目。

【讨论】:

  • 难道我不能有一个循环遍历列表视图中的每个项目并检查其值/文本并返回项目的位置吗?那会是什么样子?
  • 如何控制 getPosition(obj) 中的比较?我有一个 Coin 对象数组,我想比较 Coin 中私有字符串的属性。
  • @Don,我们没有比较任何东西,我们正在获取容器中对象的索引。如果您想更改获取索引的方式,请考虑覆盖ArrayAdapter.getPosition(obj)。否则,如果您需要比较,最好使用比较器和内置排序功能。
  • @Don,如果您想在此处发布问题并将其链接或给我发消息,我很乐意在有机会时查看。
【解决方案2】:

你可以这样做

Toast.makeText(getApplicationContext, "The position of the clicked item is " + position, Toast.LENGTH_SHORT).show();

在您将实现的列表视图onItemClickListener()

【讨论】:

  • 它不能在 onItemClickListener() 中。它必须在 ArrayAdapter 中。
  • 我只需要一个 for 循环来检查每个列表视图项目的值并返回项目的位置。
猜你喜欢
  • 2021-03-10
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多