使用searchview java过滤后获取listview的原始位置

时间:2017-05-05 18:23:41

标签: java android listview position

我有一个用这个数组填充的listview

arrayList.add("Adam");
arrayList.add("Bob");
arrayList.add("Bob");
arrayList.add("Charlie");

然后我有一个searchview,根据用户输入的内容正确过滤适配器

String text = textField.getText().toString().toLowerCase(Locale.getDefault());
            adapter.getFilter().filter(text);

如果用户键入“B”,则“Bob”和“Bob”是列表视图中显示的唯一项目。如果我点击顶部,项目位置为0.我需要获得该项目的原始位置(在本例中为1)。我知道我可以获取行的上下文并搜索arrayList以查找该项的第一个匹配项。然后我可以在未经过滤的arraylist中找到自己的位置。 (实施例)

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            int i = 0;

            String text = ((TextView) view).getText().toString();

            i = arrayList.indexOf(text);

            if(textLength == 0)
                Toast.makeText(getApplicationContext(), text + " and position is " + position, Toast.LENGTH_SHORT).show();
            else{
                Toast.makeText(getApplicationContext(), text + " and position is " + i, Toast.LENGTH_SHORT).show();
            }

        }
    });

如果没有应用过滤,无论我点击哪一行,这都有效。过滤后,我无法在数组列表中搜索所选行的第一个匹配项,因为可能有多个项目具有相同的文本。此外,如果我点击第二个“Bob”(过滤后),它将只返回第一个“Bob”的位置(即1)。我理解这个问题,我只是想不通一个解决方案。有没有一种有效的方法来解决这个问题?

这就是我可以得到一个概念验证工作。我的实际项目有多个数组列表。因此,无论它们是原始数组列表中具有相同文本(Bob和Bob)的多个项目,其他数组列表都具有不同的值。这就是为什么我需要原始位置而不搜索数组列表第一次出现的文本。我无法控制数组列表中的内容,因此我必须考虑重复项。

1 个答案:

答案 0 :(得分:-2)

请试试这个

public void onItemClick(AdapterView parent,View view,int position,long id){

parent.getItemAtPosition(位置);

*您的代码*

}