java如何使用过滤器在RecycleView中比较OriginallList和filterList?
在这段代码中,我搜索了多个文本,例如,我搜索了sachin
sachin将显示列表,但单击可将sachin返回到适配器上的sac not display to sa列表。没有任何库如何解决它
当我这次按back space并删除一个字符时,dos not list not display。
范例
假设我将搜索sachin改为文本sachin改为sac。在这种情况下,不显示sa列表。我已清除所有列表,该案例显示所有列表。
搜索并显示列表
萨钦和萨达尔
现在搜索sac
现在显示sachin
仅搜索sac到sc
此时仅显示sachin
不显示列表中的sardar
我的适配器
private class ItemFilter extends Filter {
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0) {
ArrayList<Build> buildlist = new ArrayList<Build>();
for (int i = 0; i < buildList.size(); i++) {
if ((buildList.get(i).getName().toUpperCase())
.contains(constraint.toString().toUpperCase())) {
Build babydata = new Build(buildList.get(i).getImages(), buildList.get(i).getName());
buildlist.add(babydata);
}
}
results.count = buildlist.size();
results.values = buildlist;
} else {
results.count = buildList.size();
results.values = buildList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
buildList = (ArrayList<Build>) results.values;
notifyDataSetChanged();
}
}
活动课
EditText editTxt = (EditText) findViewById(R.id.search);
editTxt.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length() <= 0) {
Log.d("jay", "s.length() <= 0" + s.toString());
buildList.clear();
buildList.addAll(buildListCopy);
recyclerView.setAdapter(null);
buildCustomAdapter = new BuildCustomAdapter(buildList);
recyclerView.setAdapter(buildCustomAdapter);
} else {
buildCustomAdapter.getFilter().filter(s.toString());
}
Log.d("jay", "mobisharnam" + s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
# 1 楼答案
我更喜欢搜索过滤器的谓词 我已经将您的代码更改为使用谓词,您必须使用GoogleGuava库 在你的简历中包括以下相关内容
现在,检查下面的代码
这是我们在上面使用的搜索过滤器谓词
# 2 楼答案
没有任何库的简单逻辑
我终于找到了这个问题的答案
在适配器构造函数中添加新的副本列表
复制列表在外接程序筛选器中显示后
活动类
像这样