Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何保存recyclerview scroll dx?_Android_Android Recyclerview - Fatal编程技术网

Android 如何保存recyclerview scroll dx?

Android 如何保存recyclerview scroll dx?,android,android-recyclerview,Android,Android Recyclerview,我在项目中使用RecyclerView并将layoutManager设置为垂直。 此recyclerview(标记:ARecyclerView)中有多个视图类型,大多数视图类型都包含带有水平布局管理器的recyclerview(标记:BRecyclerView) 但如果我在BrecycleView中滚动水平项目,然后在ArecycleView中滚动垂直项目,此时,由于回收商的原因,BrecycleView始终是第一个项目 这是我的密码: public class MainAdapter exte

我在项目中使用RecyclerView并将layoutManager设置为垂直。 此recyclerview(标记:ARecyclerView)中有多个视图类型,大多数视图类型都包含带有水平布局管理器的recyclerview(标记:BRecyclerView)

但如果我在BrecycleView中滚动水平项目,然后在ArecycleView中滚动垂直项目,此时,由于回收商的原因,BrecycleView始终是第一个项目

这是我的密码:

public class MainAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private Context mContext;
private static HashMap<Integer, Integer> indexmap = new HashMap<>();

public MainAdapter(Context context) {
    this.mContext = context;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = null;
    RecyclerView.ViewHolder viewHolder = null;

    view = LayoutInflater.from(mContext).inflate(R.layout.item_main, parent, false);
    viewHolder = new AViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
    AViewHolder aViewHolder = (AViewHolder) holder;
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 400);
    aViewHolder.rootView.setLayoutParams(lp);
    aViewHolder.recyclerView.setHasFixedSize(true);
    aViewHolder.recyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
    aViewHolder.recyclerView.setAdapter(new SubAdapter(mContext));
    aViewHolder.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            int i = recyclerView.computeHorizontalScrollOffset();
        }
    });
}

@Override
public int getItemCount() {
    return 20;
}

private static class AViewHolder extends RecyclerView.ViewHolder {

    public View rootView;
    public RecyclerView recyclerView;

    public AViewHolder(View itemView) {
        super(itemView);
        rootView = itemView.findViewById(R.id.root_view);
        recyclerView = (RecyclerView) itemView.findViewById(R.id.recyclerview);
    }
}
}


public class SubAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private Context mContext;
public SubAdapter(Context context) {
    this.mContext = context;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = null;
    RecyclerView.ViewHolder viewHolder = null;

    view = LayoutInflater.from(mContext).inflate(R.layout.item_sub, parent, false);
    viewHolder = new SubViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    SubViewHolder subViewHolder = (SubViewHolder) holder;
    subViewHolder.textView.setText(position + "");
}

@Override
public int getItemCount() {
    return 20;
}

private static class SubViewHolder extends RecyclerView.ViewHolder{

    private TextView textView;

    public SubViewHolder(View itemView) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.text);
    }
}
}
公共类MainAdapter扩展了RecyclerView.Adapter{ 私有上下文; 私有静态HashMap indexmap=newhashmap(); 公共主适配器(上下文){ this.mContext=上下文; } @凌驾 public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){ 视图=空; RecyclerView.ViewHolder ViewHolder=null; 视图=LayoutFlater.from(mContext)。充气(R.layout.item_main,parent,false); viewHolder=新的AViewHolder(视图); 返回视图持有者; } @凌驾 public void onBindViewHolder(RecyclerView.ViewHolder,最终int位置){ AViewHolder AViewHolder=(AViewHolder)支架; LinearLayout.LayoutParams lp=新的LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_父项,400); aViewHolder.rootView.setLayoutParams(lp); aViewHolder.recyclerView.setHasFixedSize(true); aViewHolder.recyclerView.setLayoutManager(新的LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false)); aViewHolder.recyclerView.setAdapter(新的子适配器(mContext)); aViewHolder.recyclerView.addOnScrollListener(新的recyclerView.OnScrollListener(){ @凌驾 已填空的公共空间(RecyclerView RecyclerView、int dx、int dy){ super.onScrolled(recyclerView、dx、dy); int i=recyclerView.computeHorizontalScrollOffset(); } }); } @凌驾 public int getItemCount(){ 返回20; } 私有静态类AViewHolder扩展了RecyclerView.ViewHolder{ 公众观点; 公共回收视图回收视图; 公共AViewHolder(视图项视图){ 超级(项目视图); rootView=itemView.findviewbyd(R.id.root\u视图); recyclerView=(recyclerView)itemView.findViewById(R.id.recyclerView); } } } 公共类子适配器扩展了RecyclerView.Adapter{ 私有上下文; 公共子适配器(上下文){ this.mContext=上下文; } @凌驾 public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){ 视图=空; RecyclerView.ViewHolder ViewHolder=null; 视图=LayoutFlater.from(mContext)。充气(R.layout.item_子项,父项,false); viewHolder=新的子viewHolder(视图); 返回视图持有者; } @凌驾 BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){ 子视图持有者子视图持有者=(子视图持有者)持有者; subViewHolder.textView.setText(位置+“”); } @凌驾 public int getItemCount(){ 返回20; } 私有静态类SubViewHolder扩展了RecyclerView.ViewHolder{ 私有文本视图文本视图; 公共子视图持有者(视图项视图){ 超级(项目视图); textView=(textView)itemView.findViewById(R.id.text); } } }
有什么办法可以解决这个问题吗?

这是因为您每次在onBindViewHolder中都调用setAdapter。尝试将创建和设置适配器移动到OnCreateViewHolderHanks!正如您所说,我已经在onCreateViewHolder中更改了setAdapter。但是,由于它的多路复用机制,例如,当我水平滚动第一个项目,然后垂直滚动时,新项目也会显示与第一个项目相同的位置。这是我的代码,似乎要保存项目滚动位置?