大家好我有一个自定义列表适配器和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);
}
});
任何有关此建议都将受到赞赏
感谢
答案 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) {
}
});
而过滤后的列表是您的数据列表。