1

在我的程序中,我试图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)的。有任何想法吗?

4

2 回答 2

0

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

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

mAdapter.getFilter().filter(queryText);

请观看谷歌的讲座“ listView 的世界”了解更多详细信息,包括使用这种方法的优点。

于 2013-07-10T12:18:26.687 回答
0

代替:

sortContacts = listContacts;

和:

sortContacts.addAll(listContacts);

正如您在此处看到的那样,当您使用时sortContacts.clear();,您正在清除两个列表 ( sortContacts& listContacts),因为行sortContacts = listContacts;

另外,正如 Rajitha 评论中提到的,除非您设置您的适配器ListViewupdateAdapter()我看不到),否则您ListView将不会随着ArrayLists的更改而更新

于 2013-07-10T10:51:17.267 回答