我希望以这样的方式过滤ListView
:当用户在EditText
项目中ListView
中键入单词/字符串时,应该过滤该项目。
在下面的代码中,EditText
会检查初始字符中的项目名称。我不需要那个。
例如:
列出项目:sachin,dhoni,yuvraj ......
的EditText:v ......
搜索结果应该显示 yuvraj
这是我的代码:
public void onTextChanged(CharSequence s, int start, int before, int count) {
textlength = editText.getText().length();
text_sort.clear();
image_sort.clear();
for (int i = 0; i < names.length; i++) {
if (textlength <= names[i].length()) {
if (editText.getText().toString().equalsIgnoreCase((String)names[i].subSequence(0,textlength))) {
text_sort.add(names[i]);
image_sort.add(imageid[i]);
}
}
}
listView.setAdapter(new MyCustomAdapter(text_sort, image_sort));
}
答案 0 :(得分:2)
就是这么简单,onTextChanged方法中的这一行就可以实现神奇的
adapter.getFilter()过滤器(一个或多个):
如果您有自定义适配器
,则可能需要实现Filterable查看这一个教程
http://www.androidhive.info/2012/09/android-adding-search-functionality-to-listview/
答案 1 :(得分:0)
从我所看到的,您的姓名&#39;变量是一个包含所有正确名称的字符串数组吗?
两个相关事实:
1)您可以使用 for循环遍历列表。
2)此外,你可以比较字符串与 str1.toLowerCase()。contains(str2.toLowerCase()
此外,在listView.setAdapter()方法之外保留对适配器的引用,并在需要时重新分配它。 否则,您将创建该适配器的匿名实例,并最终溢出内存(即使是缓慢的)
...
private MyCustomAdapter adapter;
...
public void onTextChanged(CharSequence s, int start, int before, int count) {
text_sort.clear();
image_sort.clear();
for (String name: names) {
if(name.toLowerCase().contains(s.getText().toLowerCase()) {
text_sort.add(names[i]);
image_sort.add(imageid[i]);
}
}
adapter = new MyCustomAdapter(text_sort, image_sort)
listView.setAdapter(adapter);
}
修改:
而不是使用:
if(name.toLowerCase().contains(s.getText().toLowerCase())
检查您的字符串是否包含键入的字符串,您可以使用以下
if(name.toLowerCase().startsWith(s.getText().toLowerCase())
检查字符串是否以您刚输入的字符串
开头如果这解决了这个问题,请告诉我。
此致
答案 2 :(得分:0)
很抱歉你的代码无效....但是这对我有用(name [i] .indexOf(editText.getText()。tostring()!= - 1)