android.列表嵌套轮播,android – 在嵌套的RecyclerView中保存滚动状态

我的申请中有问题.我有主要清单(回收者视图).此列表保留20个水平回收站视图.它看起来非常类似于Netflix应用程序.我需要在主列表中保留每个“轮播”的状态.如果我将第一个项目向右移动,向左移动,向下滚动(第一个和第二个项目被回收),旋转屏幕,向上滚动,我需要恢复第一个和第二个元素的位置.

我知道我应该使用linearLayout.saveOnInstanceState和onRestoreState但我的问题是每个轮播都在主列表中.

AndroidManifest.xml中的configChanges无法发挥作用……

谢谢!

解决方法:

当您回收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()返回.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值