首页 > 解决方案 > 在 RecyclerView 中过滤

问题描述

我用这样的数据初始化了 RecyclerView 女巫:

data class ObjectData(
    var name: String,
    var pass: Boolean
) : Serializable

我正在使用 ArrayList 初始化适配器。在我的活动中,我有过滤器(全部、通过、未通过)。当我单击其中一个过滤器时,我希望 RecyclerView 刷新有关“通过”值的新数据。示例:在“通过”过滤器按钮上,它将仅显示具有 pass=true 的 ObjectData。

问题:最好的方法是什么?我可以保存 3 个列表视图,一个包含所有数据,一个包含传递的对象,一个包含未传递的对象,并在更改过滤器时使用所需的列表更新适配器。但这会导致数据重复。我可以在过滤器上将所有数据复制到新的过滤列表,但它会在每个按钮过滤器单击时触发复制,并且用户可以快速更改过滤器。

你有什么建议。

标签: javaandroidkotlinandroid-recyclerview

解决方案


我会简单地创建副本并缓存它们,例如:

data class ObjectData(
    var name: String,
    var pass: Boolean
) : Serializable

val allData: List<ObjectData> = emptyList()

val filteredData: Map<Boolean, List<ObjectData>> by lazy {
    allData.groupBy { it.pass }
}

这样,您将一次性创建两个过滤列表,并且仅在需要时创建。

老实说,如果数据集不大,除非我看到性能很差,否则我不会过早地进行优化。现在Android有更好的内存处理。


推荐阅读