【问题标题】:RecyclerView with two viewtypes dont save view state on scroll具有两种视图类型的 RecyclerView 不会在滚动时保存视图状态
【发布时间】: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


【解决方案1】:

通过向我的对象添加一个包含该数量的元素然后在onBindViewHolder()中恢复它来解决问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    相关资源
    最近更新 更多