Android:如何在RecyclerView列表中维护CardViews的View?

时间:2017-01-31 23:31:21

标签: android android-recyclerview android-adapter

我有一个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;

}

1 个答案:

答案 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中编写或清除文本时,它可以正常工作。