【问题标题】:how to update listview based on edittext value in android如何根据android中的edittext值更新listview
【发布时间】:2014-04-26 18:58:00
【问题描述】:

我现在有 edittext 和下面的一个列表视图,如果需要基于 edittext 上的文本搜索意味着我需要更新列表视图。存储在 arraylist 中的列表视图值

【问题讨论】:

  • 使用过滤。如果你使用ArrayAdapter,你可以使用adpter.getFilter().filter(...)...
  • 你能解释一下吗,如何从edittext传递值以及如何获取搜索值
  • 看到这个stackoverflow.com/questions/20678472/…。这与您的问题相似...
  • 不要让士气低落或任何事情,请在提问之前尝试在 google 或 SO 上搜索。这个来自SO

标签: android android-listview


【解决方案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

        }
    });

outside 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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    相关资源
    最近更新 更多