首页 > 解决方案 > 如果数据在 recyclerView 中不可见,返回什么

问题描述

拥有一个带有来自后端的数据馈送列表的 recyclerView。随着显示方向的改变或其他一些情况,一些数据项此时不应显示。

我想它可能会返回Adapter.IGNORE_ITEM_VIEW_TYPE以识别这种情况:

override fun getItemViewType(position: Int) {
    return if (item(position).showConditionMeet() == false) {
               Adapter.IGNORE_ITEM_VIEW_TYPE
           } else {
             // normal case
               item(position).type 
           }
 }

但是如何跳过中的创建视图override fun onCreateViewHolder(parent: ViewGroup, viewType: Int)

它不能从那里返回 null 。如果创建了任何视图,那么override fun onBindViewHolder()也将被调用。

有什么建议吗?

标签: androidandroid-recyclerviewkotlin

解决方案


getItemViewType(Int)的很好。

onCreateViewHolder(ViewGroup, Int)应该有一个取决于 viewType 的开关,如果Adapter.IGNORE_ITEM_VIEW_TYPE你应该简单地返回一个 BLANK 视图(可能是高度为 0 的视图?)。

onBindViewHolder(ViewHolder, Int)还必须检查 viewType (您可以简单地调用ViewHolder.getItemViewType提供ViewHolder)。如果Adapter.IGNORE_ITEM_VIEW_TYPE您知道您有 BLANK 视图,那么请跳过绑定。

当您的数据准备好显示时,调用notifyItemChanged(Int)告诉适配器刷新相关位置:它将调用getItemViewType(Int)以确定ViewHolder要使用的类型。

此时,您的 BLANKViewHolder将被退回RecycledViewPool,您应该将常规ViewHolder传递给onBindViewHolder(ViewHolder, Int).


推荐阅读