【问题标题】:custom list adapter with filter doesn't work in android带有过滤器的自定义列表适配器在android中不起作用
【发布时间】:2018-02-21 19:21:07
【问题描述】:

大家好,我有一个自定义列表适配器和 edittext 作为过滤器,当我输入任何内容时,列表消失并且没有任何内容被过滤

这里是适配器类中的过滤方法

 public void filter(String charText) {
    charText = charText.toLowerCase(Locale.getDefault());
    DataList.clear();
    if (charText.length() == 0) {
        DataList.addAll(arraylist);
    } else {
        for (Electors wp : arraylist) {
            if (wp.getName().toLowerCase(Locale.getDefault())
                    .contains(charText)) {
                DataList.add(wp);
            }
        }
    }
    notifyDataSetChanged();
}

这是我在 mainactivity 中调用它的地方

 name.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                                  int count) {


        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {

        }

        @Override
        public void afterTextChanged(Editable theWatchedText) {

            String text = name.getText().toString().toLowerCase(Locale.getDefault());
            Vote.this.adapter.filter(text);

        }
    });

对此的任何建议将不胜感激

谢谢

【问题讨论】:

标签: java android listview


【解决方案1】:

Vote.this.adapter.getFilter().filter(s);

onTextChanged 函数中。 这应该适合你。

【讨论】:

  • 只需将 ListAdapter 替换为 SimpleAdapter 或 ArrayAdapter 并保持一切不变。它会起作用的。
【解决方案2】:

您可以在 onTextChanged() 方法中使用它,如下所示

editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //Use this below line if you want to use it in filter method from your adapter and put the below code in that method.
            //filter(editText.getText().toString());
            String text = editText.getText().toString().toLowerCase();
            filteredList.clear();
            for (String str : arrayList){
                String name = str.toLowerCase();
                if(name.contains(text)) {
                    filteredList.add(str);
                }
            }
            adapter.notifyDataSetChanged();
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

而过滤列表是您的 DataList。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多