android - 如果数据在 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()
也将被调用。
有什么建议吗?
解决方案
你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)
.
推荐阅读
- ios - iOS 中的状态栏会自行变暗
- php - 从上传的文件中读取内容时出现错误
- git - 在 kDiff3 中完成合并后如何触发自动命令?
- dart - 飞镖“向上转型”实际上并不是向上转型
- android - 如何在 Android 中使用 CameraX Jetpack 库进行直播?
- python - 在 Python 3 的 Pytz 模块中将 EST、CST 和 DST 时区转换为 unix 时间戳
- python - 安装 catboost 、 Xgboost 和 lgbm 的问题
- python - 如何以另一种格式获取列表?
- node.js - 即使在服务器代码中添加标头后,跨域请求也被阻止
- c++ - 递归地反转堆栈