使用EditText过滤ListView并不适用于Android

时间:2013-07-10 10:30:14

标签: android android-listview android-edittext

在我的计划中,我试图通过ListView搜索EditText搜索中的某些联系人。
代码是:

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)。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

替换:

sortContacts = listContacts;

使用:

sortContacts.addAll(listContacts);

正如您可以看到here,当您使用sortContacts.clear();时,由于行sortContacts <而您正在清除这两个列表(listContacts&amp; sortContacts = listContacts;) / p>

另外,正如Rajitha评论中所述,除非您在ListView(我看不到)中设置了updateAdapter()的适配器,否则您的ListView将不会更新ArrayList

答案 1 :(得分:0)

这不是过滤 listView的适配器的推荐方法。

您应该使适配器实现可过滤并使用以下内容:

mAdapter.getFilter().filter(queryText);

请观看谷歌的演讲“the world of listView”了解更多详情,包括使用此方法的优势。