2013-07-10 43 views
1

在我的程序中,我試圖通過EditText搜索ListView中的某些聯繫人。
的代碼是:帶有EditText的過濾器ListView不起作用Android

private ArrayList<String> listContacts=new ArrayList<String>(); 
private ArrayList<String> sortContacts; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.myprofile_layout); 


    listViewContacts = (ListView) findViewById(R.id.listViewContacts); 
    editTextSearch = (EditText) findViewById(R.id.editTextSearch); 
    listContacts.add("User1"); 
    listContacts.add("Albert"); 
    listContacts.add("lol"); 
    listContacts.add("str"); 
    sortContacts = listContacts; 
editTextSearch.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
       sortContacts.clear(); 
       for (int i = 0; i < listContacts.size(); i++) { 

        if(editTextSearch.getText().length() <= listContacts.get(i).length()){ 
         if(listContacts.get(i).toLowerCase().contains(editTextSearch.getText().toString().toLowerCase())) 
         { 
          sortContacts.add(listContacts.get(i)); 
         } 
        } 
       } 

       updateAdapter(); 

      } 

程序不起作用:插入字符ListView擦除。通過調試,我看到listContacts列表是(size()=0)。有任何想法嗎?

+1

您的適配器在哪裏? ListView在哪裏? –

回答

0

替換:

sortContacts = listContacts; 

有:

sortContacts.addAll(listContacts); 

正如你可以看到here,當您使用sortContacts.clear();,你清除,因爲線的兩個列表(sortContacts & listContactssortContacts = listContacts;

也如Rajitha評論所述,除非你等你ListViewupdateAdapter()適配器(我看不到),你的ListView不會與ArrayList小號

0

這是不推薦的方法過濾一個ListView的適配器的變化進行更新。

你應該使適配器實現可過濾和使用這樣的:

mAdapter.getFilter().filter(queryText); 

請關注谷歌的講座「the world of listView」的更多細節,包括使用此方法的優點。

相關問題