使用多个 RecyclerView 和其他视图保存/恢复 NestedScrollView 的状态

Posted

技术标签:

【中文标题】使用多个 RecyclerView 和其他视图保存/恢复 NestedScrollView 的状态【英文标题】:Save / Restore state of NestedScrollView with multiple RecyclerViews and other views 【发布时间】:2017-01-03 22:43:33 【问题描述】:

更新:这个方法有效,只是保存无效,所以我选择了另一种方法来保存这个数组。

在我的布局中,我有一个 NestedScrollView 和一个 LinearLayout,其中包含多个 RecyclerViews 和其他视图。布局位于片段内。 我尝试通过以下方式保存和恢复滚动状态(它是 Kotlin,所以不要对语法感到困惑):

fun NestedScrollView.savePosition(bundle: Bundle?) 
    bundle?.putIntArray("SCROLL_VIEW_POSITION", intArrayOf(scrollX, scrollY))


fun NestedScrollView.restorePosition(bundle: Bundle?) 
    bundle?.getIntArray("SCROLL_VIEW_POSITION")?.let  post  scrollTo(it[0], it[1])  

我在onSaveInstanceState 中调用第一个函数,在所有 RecyclerView 都加载了它们的内容之后调用第二个函数。

但它不起作用......

有什么想法吗?

【问题讨论】:

能否请您提供更多关于您恢复职位的详细信息。我的意思是默认情况下,您需要恢复视图状态以及类似的内容,或者在onRestoreInstanceStateonCreate 中。你在哪里打电话NestedScrollView.restorePosition 我认为 NestedScrollView 会破坏你的垂直 RecyclerView 的回收。 【参考方案1】:

如果您想在使用片段管理器弹出堆栈后恢复 NestedScrollView 的滚动位置,则无需手动执行。对我来说,问题在于缺少 NestedScrollView 的 id。在我在 xml 布局中添加 id 之后 - 一切都很好。

【讨论】:

以上是关于使用多个 RecyclerView 和其他视图保存/恢复 NestedScrollView 的状态的主要内容,如果未能解决你的问题,请参考以下文章

在 RecyclerView 中使用多个视图类型时如何将项目添加到所需的 ViewHolder 位置?

RecyclerView 中的多个视图

RecyclerView中的多个视图

如何通过 Volley 获取数据实现具有两个或多个不同卡片视图的 RecyclerView?

使用数据绑定的具有多个视图类型的 Android recyclerview 适配器

从 RecyclerView Adapter Android 隐藏和显示多个视图持有者