Android 如何让片段中的多个独立RecyclerViews记住它们的滚动位置?

Android 如何让片段中的多个独立RecyclerViews记住它们的滚动位置?,android,android-recyclerview,Android,Android Recyclerview,我希望我的应用程序的主屏幕包含三到五个旋转木马。所有这些旋转木马都包含与卡片相同的数据(想想Netflix主屏幕,一个水平旋转木马的垂直列表,所有这些旋转木马都包含代表电影的卡片) 我使用一个自定义的CarouselView实现了这些旋转木马,该视图的布局包含一个在水平方向上具有LinearLayoutManager的RecyclerView。然后,主屏幕在布局中的嵌套滚动视图中嵌入了几个这样的旋转视图 单击其中一个转盘中的卡,用户将导航到同一活动中的另一片段。我希望在这种情况下,当用户单击“上

我希望我的应用程序的主屏幕包含三到五个旋转木马。所有这些旋转木马都包含与卡片相同的数据(想想Netflix主屏幕,一个水平旋转木马的垂直列表,所有这些旋转木马都包含代表电影的卡片)

我使用一个自定义的CarouselView实现了这些旋转木马,该视图的布局包含一个在
水平方向上具有
LinearLayoutManager
的RecyclerView。然后,主屏幕在布局中的嵌套滚动视图
中嵌入了几个这样的旋转视图

单击其中一个转盘中的卡,用户将导航到同一
活动中的另一
片段
。我希望在这种情况下,当用户单击“上一步”按钮将其返回到主
片段时,所有旋转木马将与离开
片段时的启动位置相同
LinearLayoutManager
理论上应该为我处理好这一切

但是,目前仅保存屏幕上最后一个RecyclerView的滚动位置。也就是说,如果我仅水平滚动第三个旋转木马(例如,卡3),单击一张卡导航到一个新的
片段
,然后按back,home
片段
现在显示,所有旋转木马都滚动到第三张卡。如果我仅滚动第一个旋转木马(将第三个旋转木马保留在其初始位置),则导航离开然后返回将导致所有旋转木马重置为其原始位置

如何设置旋转木马,使它们都能记住各自的滚动位置

下面是一个小应用程序的链接,说明了我的问题:


编辑:我认为问题的直接原因是RecyclerViews都具有相同的ID(因为它们都具有在CarouseView布局中分配给它们的ID)。

我已将以下功能添加到我的CarouseView类中:

fun setRecyclerViewId(id: Int) {
    cardCarousel.id = id
}
然后,我从每个CarouseView实例的HomeFragment中调用它:

carouselView.setRecyclerViewId(R.id.carousel1_recyclerview_id)
carouselView2.setRecyclerViewId(R.id.carousel2_recyclerview_id)
使用
res/values/id.xml
文件中设置的id


现在,每个RecyclerView都有一个独立且一致的ID,因此它们的位置可以被正确地独立地记住。

我已将以下函数添加到我的CarouseView类中:

fun setRecyclerViewId(id: Int) {
    cardCarousel.id = id
}
然后,我从每个CarouseView实例的HomeFragment中调用它:

carouselView.setRecyclerViewId(R.id.carousel1_recyclerview_id)
carouselView2.setRecyclerViewId(R.id.carousel2_recyclerview_id)
使用
res/values/id.xml
文件中设置的id

现在,每个RecyclerView都有一个独立且一致的ID,因此它们的位置可以被正确地独立地记住