使用多个 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 都加载了它们的内容之后调用第二个函数。
但它不起作用......
有什么想法吗?
【问题讨论】:
能否请您提供更多关于您恢复职位的详细信息。我的意思是默认情况下,您需要恢复视图状态以及类似的内容,或者在onRestoreInstanceState
或onCreate
中。你在哪里打电话NestedScrollView.restorePosition
?
我认为 NestedScrollView 会破坏你的垂直 RecyclerView 的回收。
【参考方案1】:
如果您想在使用片段管理器弹出堆栈后恢复 NestedScrollView 的滚动位置,则无需手动执行。对我来说,问题在于缺少 NestedScrollView 的 id。在我在 xml 布局中添加 id 之后 - 一切都很好。
【讨论】:
以上是关于使用多个 RecyclerView 和其他视图保存/恢复 NestedScrollView 的状态的主要内容,如果未能解决你的问题,请参考以下文章
在 RecyclerView 中使用多个视图类型时如何将项目添加到所需的 ViewHolder 位置?
如何通过 Volley 获取数据实现具有两个或多个不同卡片视图的 RecyclerView?