2016-08-04 65 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)