[英]Getting wrong position after Recyclerview filtering using SearchView
[英]Getting original position of listview after filtering with searchview java
我有一个用此数组填充的列表视图
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)。 我了解问题,只是想不出解决方案。 是否有解决此问题的有效方法?
这只是为了让我可以得到概念验证的结果。 我的实际项目有多个数组列表。 因此,无论它们是原始数组列表中具有相同文本(鲍勃和鲍勃)的多个项目,还是其他数组列表都具有不同的值。 这就是为什么我需要原始位置而无需在数组列表中搜索文本的第一次出现的原因。 我将无法控制数组列表中的内容,因此必须考虑重复项。
请尝试这个
public void onItemClick(AdapterView parent,View view,int position,long id){
parent.getItemAtPosition(position);
*您的代码*
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.