2012-10-14 39 views
1

我已經創建了一個列表視圖,其中數據來自存儲在string.xml中的字符串數組。如何使用textwatcher從listview中搜索數據?

我有一個edittext,我想從我的列表視圖中搜索特定的數據。我的列表視圖數據包含像這樣011 Delhi delhi ...我該怎麼做?

這裏是我的代碼..

adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, arrayList); 

Resources res = getResources(); 
String[] a = res.getStringArray(R.array.states); 
arrayList.add("" + a); 
adapter.notifyDataSetChanged(); 

editText.addTextChangedListener(new TextWatcher() { 
    public void onTextChanged(CharSequence s, int start, int before, 
           int count) { 
     // TODO Auto-generated method stub 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
            int after) { 
     // TODO Auto-generated method stub 
    } 

    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 
    } 
}); 

回答

3

我希望下面的代碼爲你工作。如果你想要一個索引,那麼你可以使用我們的傳統for

String text_to_search = editText.getText().toString(); 
for(String str : your_list) { 
    if(str.equals(text_to_search) { 
     //Do your operation 
    } 
} 

public class MainActivity extends Activity { 
    private ListView lv; 
    private EditText et; 
    String listview_array[]={"123","TWO","Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense", "1234", "iPhone 4S", "Samsung Galaxy Note 800", "Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro"}; 
    private ArrayList<String> array_sort = new ArrayList<String>(); 
    int textlength = 0; 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     lv = (ListView) findViewById(R.id.ListView01); 
     et = (EditText) findViewById(R.id.EditText01); 
     lv.setAdapter(new ArrayAdapter<String>(this, 
     android.R.layout.simple_list_item_1, listview_array)); 
     int x= lv.getHeaderViewsCount(); 
     et.addTextChangedListener(new TextWatcher() 
     { 
      public void afterTextChanged(Editable s) 
      { 
       // Abstract Method of TextWatcher Interface. 
      } 
      public void beforeTextChanged(CharSequence s, 
      int start, int count, int after) 
      { 
       // Abstract Method of TextWatcher Interface. 
      } 
      public void onTextChanged(CharSequence s, 
      int start, int before, int count) 
      { 
       textlength = et.getText().length(); 
       array_sort.clear(); 
       for (int i = 0; i < listview_array.length; i++) 
       { 
        if (textlength <= listview_array[i].length()) 
        { 
         if (et.getText().toString().equalsIgnoreCase(
         (String) 
         listview_array[i].subSequence(0, 
         textlength))) 
         { 
          array_sort.add(listview_array[i]); 
         } 
        } 
       } 
       lv.setAdapter(new ArrayAdapter<String> 
       (MainActivity.this, 
       android.R.layout.simple_list_item_1, array_sort)); 
      } 
     }); 
    } 
} 
+0

感謝名單了很多。它的工作原理..但有一個問題,我的listview包含011德里德里...如果我寫德里比它不顯示重要做這樣做嗎? –

+0

要搜索德里,你必須輸入011 D.它匹配011然後空格然後搜索任何以D開頭的東西。 – Raghunandan

+0

但是如果我想爲新德里找到一個代碼而不是如何可能呢? –

1

您可以搜索這樣的。

+0

string.xml中的數組是否有限制? –

+0

@PavanAnadkat不知道buddy.did我的解決方案爲你工作? –

1

在您的適配器中使用此代碼。

public void filter(String charText) { 
     charText = charText.toLowerCase(); 
     picList.clear(); 
     if (charText.length() == 0) { 
      picList.addAll(listpicOrigin); 
     } else { 
      for (Picture pic : listpicOrigin) { 
       if (pic.getPicName().toLowerCase().contains(charText)) { 
        picList.add(pic); 
       } 
      } 
     } 
     notifyDataSetChanged(); 
    } 

更多細節,你可以參考this tutorial

相關問題