Java 使用子字符串搜索筛选ListView

Java 使用子字符串搜索筛选ListView,java,android,listview,search,filter,Java,Android,Listview,Search,Filter,我想过滤列表视图,当用户在编辑文本中键入出现在列表视图项中的单词/字符串时,应该过滤该项 在下面的代码中,EditText从初始字符检查项目名称。我不需要那个 例如: 清单项目:萨钦、多尼、尤夫拉吉 编辑文本:v 搜索结果应该显示yuvraj 这是我的密码: public void onTextChanged(CharSequence s, int start, int before, int count) { textlength = editText.getText(

我想过滤
列表视图
,当用户在
编辑文本
中键入出现在
列表视图
项中的单词/字符串时,应该过滤该项

在下面的代码中,
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));
        }
public void onTextChanged(字符序列、int start、int before、int count){
textlength=editText.getText().length();
text_sort.clear();
图像_sort.clear();
for(int i=0;i如果(textlength从我所看到的,您的'names'变量是一个包含所有名称的字符串数组,对吗

与此相关的两个事实:
1) 您可以使用for循环在列表中迭代。
2) 此外,您可以将字符串与str1.toLowerCase()进行比较。contains(str2.toLowerCase()

另外,将对适配器的引用保留在listView.setAdapter()方法之外,并在需要时重新分配它。 否则,您将创建该适配器的匿名实例,并最终溢出内存(即使速度很慢)

编辑:

而不是使用:

  if(name.toLowerCase().contains(s.getText().toLowerCase())
检查字符串是否包含键入的字符串,可以使用以下命令

  if(name.toLowerCase().startsWith(s.getText().toLowerCase())
检查字符串是否以您刚才键入的字符串开头

让我知道这是否解决了问题


在这方面,

它是如此简单,只需在ContextChanged方法中的这一行就可以发挥神奇的作用

adapter.getFilter().filter:

如果有自定义适配器,则可能需要实现Filterable

检查这一个教程


很抱歉,您的代码不起作用……但是如果(name[i].indexOf(editText.getText().tostring()!=-1),这对我来说是有效的

参考:检查这个答案。希望如此helps@kathi...i更新了我的代码,请看一看……而且我也不明白该链接中的代码似乎在起作用……但是你能把它做成例如:sachin tendulkar……每个单词的起始字符……意味着如果我搜索“t”……sachin tendulkar应该显示出来检查我的更新。投票和检查它是否解决了您的问题。如果没有,请让我知道。RegardsB因为示例使用对象作为循环,而不是数组作为循环。请在此处检查差异:
  if(name.toLowerCase().startsWith(s.getText().toLowerCase())