Android 如何保存recyclerview scroll dx?
我在项目中使用RecyclerView并将layoutManager设置为垂直。 此recyclerview(标记:ARecyclerView)中有多个视图类型,大多数视图类型都包含带有水平布局管理器的recyclerview(标记:BRecyclerView) 但如果我在BrecycleView中滚动水平项目,然后在ArecycleView中滚动垂直项目,此时,由于回收商的原因,BrecycleView始终是第一个项目 这是我的密码:Android 如何保存recyclerview scroll dx?,android,android-recyclerview,Android,Android Recyclerview,我在项目中使用RecyclerView并将layoutManager设置为垂直。 此recyclerview(标记:ARecyclerView)中有多个视图类型,大多数视图类型都包含带有水平布局管理器的recyclerview(标记:BRecyclerView) 但如果我在BrecycleView中滚动水平项目,然后在ArecycleView中滚动垂直项目,此时,由于回收商的原因,BrecycleView始终是第一个项目 这是我的密码: public class MainAdapter exte
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。但是,由于它的多路复用机制,例如,当我水平滚动第一个项目,然后垂直滚动时,新项目也会显示与第一个项目相同的位置。这是我的代码,似乎要保存项目滚动位置?