android - 在 RecyclerView 中未调用 ViewModel onCleared
问题描述
我有一个带有下面代码的适配器。问题是,ViewModel 的 onCleared() 方法似乎永远不会为列表项的 ViewModel 调用。是否需要设置特殊方法/标志来清除这些 ViewModel?
class BaseRecyclerViewViewModelAdapter(
private val lifecycleOwner: LifecycleOwner
) : RecyclerView.Adapter<BaseRecyclerViewViewModelViewHolder>() {
var items: List<BaseRecyclerViewItemViewModel> = emptyList()
set(value) {
field = value
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseRecyclerViewViewModelViewHolder {
val binding: ViewDataBinding =
DataBindingUtil.inflate(LayoutInflater.from(parent.context), viewType, parent, false)
return BaseRecyclerViewViewModelViewHolder(binding)
}
override fun getItemCount() = items.size
override fun onBindViewHolder(holder: BaseRecyclerViewViewModelViewHolder, position: Int) {
with(holder.binding) {
setVariable(BR.viewModel, items[position])
setLifecycleOwner(lifecycleOwner)
executePendingBindings()
}
}
override fun getItemViewType(position: Int) = items[position].layoutId
}
解决方案
推荐阅读
- python - Python3.6 并行重复定时器或多定时器
- java - 由于依赖问题,无法将 compileSdkVersion 28 升级到 29
- python - 如何减少神经网络中的假阴性?
- javascript - 如何隐藏通过 url 直接访问的 nextjs api 路由?
- echarts - 如何在没有间隙的情况下获得相同的垂直线和水平条形图?
- java - 如何在android中的任何活动中通过浮动小部件截取屏幕截图
- kotlin - 如何在 Kotlin 中使用 re{n,} 替换重复的字符串?
- mysql - 关于 Docker-Prometheus mysql exporter 数据库
- javascript - 如何在我的树视图中添加加减切换图标
- r - 分组,汇总并将值返回到 R 中的数据集?