滚动到嵌套recyclerview android kotlin中的位置

Posted

技术标签:

【中文标题】滚动到嵌套recyclerview android kotlin中的位置【英文标题】:Scroll to position in nested recyelerview android kotlin 【发布时间】:2021-12-05 15:31:29 【问题描述】:

嘿,我正在使用反向 Reyclerview。我还在项目中嵌套了 Recyclerview。我想滚动到位置。首先,我将解释我的清单。

ABC

data class ABC(
    val key: Int,
    val value: MutableList<XYZ?>
)

XYZ

data class XYZ(
    val text: Boolean? = null,
    val id: String? = null
)

列表看起来像这样

ABC(0, listof( XYZ(0,"abc") ))
ABC(1, listof( XYZ(0,"abc"), XYZ(1,"qwe"), XYZ(2,"tyu") ))
ABC(2, listof( XYZ(0,"abc") ))
ABC(3, listof( XYZ(0,"abc"), XYZ(1,"qwe") ))
...... more like this   

我使用 stackFromEndreverseLayout 来反转布局

binding.reycelerview.apply 
            this.adapter = adapter
            layoutManager = LinearLayoutManager(this.context).apply 
                stackFromEnd = false
                reverseLayout = true
            

我添加了图片看起来我的回收站视图

例如

场景1如果我想使用

reycelerview.smoothToScroll(4)

实际输出

我想在屏幕顶部显示索引 4 元素,而不是如上图所示。我正在添加预期的输出图像。

预期输出

场景 2

我想滚动到屏幕顶部的嵌套 recyerlview。我不知道该怎么做。假设我有价值去 4 索引第 2 项。

ABC(4, listof( XYZ(0,"abc"), XYZ(1,"qwe"), XYZ(2,"tyu") ))

预期输出

提前致谢。

【问题讨论】:

【参考方案1】:

您可以在 RecyclerView 的项目被回收时保存 scrollX 位置,然后在再次绑定该项目时滚动该项目:

int[] scrollXState = new int[20]; // assuming there are 20 carousel items

@Override
public void onBindViewHolder(MyViewHolder holder, int position) 
    // setup recycler here, then post scrollX after recycler has been laid out
    holder.nestedRecyclerView.post(() ->
            holder.nestedRecyclerView.setScrollX(scrollXState[holder.getAdapterPosition()]));


@Override
public void onViewRecycled(MyViewHolder holder) 
    scrollXState[holder.getAdapterPosition()] = holder.nestedRecyclerView.getScrollX();
    super.onViewRecycled(holder);


class MyViewHolder extends RecyclerView.ViewHolder 

    RecyclerView nestedRecyclerView;

    public MyViewHolder(View itemView) 
        super(itemView);
    

您唯一需要注意的是,您不希望父适配器在方向更改后被销毁和创建,使其在方向更改后仍然存在。否则将int[] 保存到Bundle,然后从onRestoreInstanceState() 取回。

【讨论】:

以上是关于滚动到嵌套recyclerview android kotlin中的位置的主要内容,如果未能解决你的问题,请参考以下文章

Android 嵌套滚动NestedScrollView+TabLayout+ViewPager+Fragment+RecyclerView 实现京东美团首页效果Tab页滚动到顶部时自动吸附

Android 嵌套滚动NestedScrollView+TabLayout+ViewPager+Fragment+RecyclerView 实现京东美团首页效果Tab页滚动到顶部时自动吸附

Android 嵌套滚动NestedScrollView+TabLayout+ViewPager+Fragment+RecyclerView 实现京东美团首页效果Tab页滚动到顶部时自动吸附

ViewPager2嵌套RecyclerView滑动冲突解决办法

RecyclerView - 如何平滑滚动到嵌套滚动视图内某个位置的项目顶部?

Android番外篇 NestedScrollView嵌套RecyclerView