如何根据Android中EditText的值更新ListView

3

我有一个EditText和下面的一个ListView,现在如果需要搜索,就根据EditText中的文本更新ListView。ListView的值存储在ArrayList中。

输入图像描述


如果您正在使用 ArrayAdapter,则可以使用 adapter.getFilter().filter(...) 进行过滤。 - Gopal Gopi
1
你能给我更多的解释吗?如何从EditText中传递值,以及如何获取搜索到的值。 - user1578542
请查看此链接:http://stackoverflow.com/questions/20678472/androidhow-to-do-a-search-on-the-first-name-and-last-name-only/20678661#20678661。它与您的问题类似... - Gopal Gopi
不是要打击你的积极性,但在提问之前最好先在谷歌或者 Stack Overflow 上搜索一下。这篇来自 SO - BlackBeard
1个回答

1
这是我的应用程序中的搜索功能,希望您能从中理解他的想法。
et_artists_searchWord.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub

            List<AdapterDTOArtist> list = filter(s.toString(),
                    mAdapterDTOsBackup, true);
            mAdapterDTOs.clear(); // <--- clear the list before add
            mAdapterDTOs.addAll(list); // <--- here is the double add if
                                        // you// do not clear before
            mLazyAdatper.setDataSet(mAdapterDTOs);
        }

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

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });

在onCreate方法之外搜索方法:

public static List<AdapterDTOArtist> filter(String string,
        Iterable<AdapterDTOArtist> iterable, boolean byName) {
    if (iterable == null)
        return new LinkedList<AdapterDTOArtist>();
    else {
        List<AdapterDTOArtist> collected = new LinkedList<AdapterDTOArtist>();
        Iterator<AdapterDTOArtist> iterator = iterable.iterator();
        if (iterator == null)
            return collected;
        while (iterator.hasNext()) {
            AdapterDTOArtist item = iterator.next();
            // if(item.getmTag_Name().startsWith(string))
            if (item.getmTag_Name().toLowerCase().startsWith(string)){
                // if
                // (item.getmTag_Name().toLowerCase(Locale.getDefault()).contains(string))
                collected.add(item);
            }
            else if(item.getmTag_Name().toUpperCase().startsWith(string)){
                collected.add(item);
            }
        }
        return collected;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接