【问题标题】:Scroll to position in nested recyelerview android kotlin滚动到嵌套recyclerview 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") ))

预期输出

提前致谢。

【问题讨论】:

    标签: android kotlin android-recyclerview android-adapter listadapter


    【解决方案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() 取回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 2015-10-08
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多