【发布时间】:2020-04-06 21:37:58
【问题描述】:
我有一个带有两种视图类型的回收器视图,一种是标题,另一种是我的产品,现在,当我选择让我们说一个产品的 5 倍时,我在项目视图中堆叠该数量,但是当我向下和向上滚动时,视图在不保存视图状态的情况下恢复,我知道这是因为 recyclerview 回收视图,然后在点击 onBindViewHolder() 时在滚动时重新创建它,但我需要保留此视图状态而不是更改。
我的选择器中没有复选框,我可以检查它是否被选中,相反,我只需要保持视图原样,而不是在滚动时更改它
我已尝试实现 getItemId 和 setHasStableIds(true),但我的适配器无法正常工作
override fun getItemId(position: Int): Long {
return super.getItemId(position)
}
override fun getItemViewType(position: Int): Int {
return when {
uiItems[position] is String -> {
HEADER_VIEWTYPE
}
uiItems[position] is Product -> {
PRODUCT_VIEWTYPE
}
else -> {
-1
}
}
}
如何在我的 recyclerview 中上下滚动时保存视图状态而不更改整行?
【问题讨论】:
-
只需在 uiItems 中添加变量来保存更改,并在函数 onBindViewHolder 中使用它
-
RecyclerView 和 ListView 背后的主要思想是,我们不需要保存状态。当 View 即将出现在屏幕上时,通过 ViewHolder 基于 View 类型的特定 View 将被膨胀。这使得有一个适当的视图回收。请维护 Adapter 中的状态并使用适当的 ViewHolder 重用它们。
-
很高兴知道您的问题已解决
标签: android kotlin android-recyclerview