2013-07-10 42 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”的更多细节,包括使用此方法的优点。

相关问题