我有一个RecyclerView列表,显示了一个垂直的CardView列表。 AppBar有一个action_search MenuItem,可以在单击时处理SearchView方法。 SearchView运行一个过滤方法,允许搜索CardView数据。
我设置了一个filterList来保存搜索结果中的过滤后的CardViews。 filter()方法在执行搜索查询之前清除filterList。问题是filterList.clear()破坏了现有RecyclerView CardViews的视图,UI恢复为空白的RecyclerView布局。
如果我从应用程序中退出按钮然后重新启动应用程序,RecyclerView会正确加载CardViews,当我点击Search MenuItem时,我就可以正确搜索;即动态且正确地更新View以仅显示与搜索文本querty匹配的那些CardView。我在这里缺少什么?
SELECT TRIM(BOTH '"' FROM json_extract(CUSTOME_FIELDS, '$."6"')) AS name FROM your_table;
}
答案 0 :(得分:1)
尝试此代码..在适配器中设置此方法
public void setFilter(ArrayList<ListItem> listItem) {
listItems = new ArrayList<>();
listItems.addAll(listItem);
notifyDataSetChanged();
}
并在onQueryTextChange()
final ArrayList<ListItem> filteredModelList = filter(listItems, newText);
adapter.setFilter(filteredModelList);
这是过滤方法。
private ArrayList<ListItem> filter(ArrayList<ListItem> models, String query) {
query = query.toLowerCase();
final ArrayList<ListItem> filteredModelList = new ArrayList<>();
for (ListItem model : models) {
final String text = model.getTodo().toLowerCase();
if (text.contains(query)) {
filteredModelList.add(model);
}
}
return filteredModelList;
}
并从适配器构造函数中删除最后两行。使用此代码,您不必为过滤器创建第二个数组列表对象,因此您不需要清除您的arraylist对象..当您在searchview中编写或清除文本时,它可以正常工作。