我有一个用这个数组填充的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)的多个项目,其他数组列表都具有不同的值。这就是为什么我需要原始位置而不搜索数组列表第一次出现的文本。我无法控制数组列表中的内容,因此我必须考虑重复项。
答案 0 :(得分:-2)
请试试这个
public void onItemClick(AdapterView parent,View view,int position,long id){
parent.getItemAtPosition(位置);
*您的代码*
}