【问题标题】:Recyclerview item loading from first one insteadRecyclerview 项目从第一个加载而不是
【发布时间】:2021-12-30 21:55:08
【问题描述】:

最近我遇到了一个需要与菜单列表链接的连续列表的项目。 类似的东西:

图片1-----图片图片
图2-----图片图片
图3-----图片图片
图4-----图片图片
图5-----图片图片

所以 LEFT 侧边菜单控制 RIGHT 尺寸视图,而 RIGHT 侧边视图是一个连续列表。
它的工作原理是这样的:
当我按下 PIC 1 时,RIGHT 侧显示 PIC 1 信息
RIGHT 侧是也可以从 PIC 1 滚动到 PIC 2 信息,当我滚动 pass PIC 1 它应该显示 右侧上的图片 2 信息

我为此使用了嵌套的 recyclerview,发生的情况是,当尝试从 PIC 2 滚动到 PIC 1 时,它不会加载 PIC 1 的底部> 首先,而是尝试加载 PIC 1 顶视图。
PIC 2 滚动到 PIC 1 时会出现这个半切图像,因为视图正在被回收。
这个问题有解决办法吗?

【问题讨论】:

  • 当滚动回 PIC 1 时,是否要恢复先前嵌套回收器视图的回收状态??
  • 当从 PIC 2 滚动回 PIC1 时,它有时会被回收,从而使其从头开始加载,我需要使其保持一致而不是从头开始加载(我试图打开回收但似乎有问题)或任何其他解决方案来执行此视图。

标签: android android-recyclerview


【解决方案1】:

在 Parent Recycler 视图中声明:

private final Map<Integer, Parcelable> parcelableMap = new HashMap<>();

之后覆盖 onViewRecycled() 并将 LayoutManager 状态保存为 Parcelable

    @Override
    public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
      
            final int position =  holder.getAdapterPosition();
            if (holder.layoutManager != null)
                parcelableMap.put(position, holder.layoutManager.onSaveInstanceState()));
       
        super.onViewRecycled(holder);
    }

将 LayoutManager 类作为我们使用嵌套回收器视图的 holder 类中的变量:

public class ItemRecyclerView extends RecyclerView.ViewHolder {

        LayoutManager layoutManager;
        ......
}

onBindViewHolder

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
    Parcelable parcelable = parcelableMap.get(position);
    holder = ..;
    if (parcelable != null && holder.layoutManager != null)
             holder.layoutManager.onRestoreInstanceState(parcelable);
             

【讨论】:

    猜你喜欢
    • 2021-10-08
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2020-12-23
    • 2021-09-09
    • 1970-01-01
    • 2015-03-28
    相关资源
    最近更新 更多