我有填充了这阵获取列表视图的原始位置搜索查看Java的滤波后
arrayList.add("Adam");
arrayList.add("Bob");
arrayList.add("Bob");
arrayList.add("Charlie");
然后我有一个搜索查看其正确过滤基于什么用户键入
String text = textField.getText().toString().toLowerCase(Locale.getDefault());
adapter.getFilter().filter(text);
适配器列表视图
如果用户键入“B”,“Bob”和“Bob”是列表视图中唯一显示的项目。如果我点击最上面的那个,那么项目位置就是0.我需要获得该项目的原始位置(在本例中为1)。我知道,我可以采取行的上下文,并搜索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),其他数组列表具有不同的值。这就是为什么我需要原始位置而不在数组列表中搜索文本的第一次出现。我不能控制数组列表中的内容,所以我必须考虑重复项。