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())