带过滤器的自定义列表适配器在android中不起作用

时间:2018-02-21 19:21:07

标签: java android listview

大家好我有一个自定义列表适配器和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);

        }
    });

任何有关此建议都将受到赞赏

感谢

2 个答案:

答案 0 :(得分:0)

  

Vote.this.adapter.getFilter()过滤器(一个或多个);

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

答案 1 :(得分:0)

你可以在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) {
        }
    });

而过滤后的列表是您的数据列表。