Android ListView:从其值中获取项目的位置?

时间:2014-12-17 21:26:23

标签: android listview

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

例如:
如果我的ListView中有一个项目显示字符串"产品1108"我如何获得"产品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);

希望这是有道理的。

2 个答案:

答案 0 :(得分:0)

如果你有一个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()方法,因为我们的循环为我们提供了一个我们获取项目的位置。

答案 1 :(得分:0)

你可以这样做

Toast.makeText(getApplicationContext, "The position of the clicked item is " + position, Toast.LENGTH_SHORT).show();
您将实施的列表视图onItemClickListener()中的