2016-08-04 34 views
0

我想过滤ListView,以便在用户键入EditTextListView项目中发生的)中的字/字符串时,应筛选该项目。使用子字符串搜索筛选ListView

在下面的代码中,EditText从首字符检查项目名称。我不需要那个。

对于如:

列表项:萨钦,多尼,俞拉吉......

的EditText:v ......

搜索结果应该显示我俞拉吉

这里是我的代码:

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

参阅:http://www.androidbegin.com/tutorial/android-search-listview-using-filter/ – Kathi

+0

[列表视图过滤器(http://stackoverflow.com/questions/24769257/custom-listview-adapter-with-filter-android)检查这个答案。它可以帮助 – skydroid

+0

@kathi ...我更新了我的代码,请亲切看看....并且我也了解了代码链接 – Devk

回答

0

从什么我可以看到,你的'name'变量是一个包含所有正确名称的字符串数组?

这里有两个相关的事实:
1)你可以用循环遍历整个列表,用for循环。
2)此外,您可以可以str1.toLowerCase()。含有(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()) 

,检查字符串是否与您刚键入

的字符串开头

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

问候,

+0

这似乎是工作....但你能让它像例如:sachin tendulkar .....每个单词的起始字符....意味着如果我搜索'吨'... sachin tendulkar应该被显示 – Devk

+0

检查我的更新。投票并检查它是否能解决您的问题。如果没有,请告诉我。问候 –

+0

我不认为这应该工作....因为没有初始化我在名称[i] – Devk

0

对不起,你的代码不工作....但这对我工作如果(名称[我] .indexOf(editText.getText()。!的ToString()= - 1)