Android 滚动时,RecyclerView值变为空,有些值更改为旧值

Android 滚动时,RecyclerView值变为空,有些值更改为旧值,android,android-studio,android-recyclerview,Android,Android Studio,Android Recyclerview,我已经创建了OrderItemRecyclerAdapter。在Editetext中输入值后,当我滚动它时,值变为空表示它将替换为第一个值。 public class OrderItemRecyclerAdapter extends RecyclerView.Adapter<OrderItemRecyclerAdapter.ViewHolder> { TextView orderAmountTxt, orderItemsTxt; Context myContext;

我已经创建了OrderItemRecyclerAdapter。在Editetext中输入值后,当我滚动它时,值变为空表示它将替换为第一个值。

public class OrderItemRecyclerAdapter extends RecyclerView.Adapter<OrderItemRecyclerAdapter.ViewHolder> {
    TextView orderAmountTxt, orderItemsTxt;
    Context myContext;
    ArrayList<ItemsGetterSetter> itemArrayList;
    ArrayList<Integer> itemAmountArray;
    ArrayList<Boolean> itemAvailableArray;
    TextView orderSaveTxtBtn;

    public OrderItemRecyclerAdapter(TextView orderAmountTxt, TextView orderItemsTxt, Context myContext, ArrayList<ItemsGetterSetter> itemArrayList, ArrayList<Integer> itemAmountArray, ArrayList<Boolean> itemAvailableArray, TextView orderSaveTxtBtn) {
        this.orderAmountTxt = orderAmountTxt;
        this.orderItemsTxt = orderItemsTxt;
        this.myContext = myContext;
        this.itemArrayList = itemArrayList;
        this.itemAmountArray = itemAmountArray;
        this.itemAvailableArray = itemAvailableArray;
        this.orderSaveTxtBtn = orderSaveTxtBtn;
    }



    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(myContext).inflate(R.layout.itemview_list, parent, false);
        final OrderItemRecyclerAdapter.ViewHolder vHolder = new ViewHolder(view);


        return vHolder;

    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.setIsRecyclable(false);
        itemAvailableArray.add(position, itemArrayList.get(position).isItemAvailable());
        itemAmountArray.add(position, itemArrayList.get(position).getAmount());
        holder.itemNameTxt.setText(itemArrayList.get(position).getItemName());
        holder.isAvailableSwitch.setChecked(itemArrayList.get(position).isItemAvailable());
        holder.itemAmountEditTxt.setText(String.valueOf(itemArrayList.get(position).getAmount()));

    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemCount() {
        return itemArrayList.size();
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView itemNameTxt;
        EditText itemAmountEditTxt;
        Switch isAvailableSwitch;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            itemNameTxt = itemView.findViewById(R.id.itemNameTxt);
            itemAmountEditTxt = itemView.findViewById(R.id.itemAmountEditTxt);
            isAvailableSwitch = itemView.findViewById(R.id.isAvailableSwitch);
        }
    }
}
我已粘贴了全部适配器代码。我找不到错误。谁都能解决它。

public class OrderItemRecyclerAdapter extends RecyclerView.Adapter<OrderItemRecyclerAdapter.ViewHolder> {
    TextView orderAmountTxt, orderItemsTxt;
    Context myContext;
    ArrayList<ItemsGetterSetter> itemArrayList;
    ArrayList<Integer> itemAmountArray;
    ArrayList<Boolean> itemAvailableArray;
    TextView orderSaveTxtBtn;

    public OrderItemRecyclerAdapter(TextView orderAmountTxt, TextView orderItemsTxt, Context myContext, ArrayList<ItemsGetterSetter> itemArrayList, ArrayList<Integer> itemAmountArray, ArrayList<Boolean> itemAvailableArray, TextView orderSaveTxtBtn) {
        this.orderAmountTxt = orderAmountTxt;
        this.orderItemsTxt = orderItemsTxt;
        this.myContext = myContext;
        this.itemArrayList = itemArrayList;
        this.itemAmountArray = itemAmountArray;
        this.itemAvailableArray = itemAvailableArray;
        this.orderSaveTxtBtn = orderSaveTxtBtn;
    }



    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(myContext).inflate(R.layout.itemview_list, parent, false);
        final OrderItemRecyclerAdapter.ViewHolder vHolder = new ViewHolder(view);


        return vHolder;

    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.setIsRecyclable(false);
        itemAvailableArray.add(position, itemArrayList.get(position).isItemAvailable());
        itemAmountArray.add(position, itemArrayList.get(position).getAmount());
        holder.itemNameTxt.setText(itemArrayList.get(position).getItemName());
        holder.isAvailableSwitch.setChecked(itemArrayList.get(position).isItemAvailable());
        holder.itemAmountEditTxt.setText(String.valueOf(itemArrayList.get(position).getAmount()));

    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemCount() {
        return itemArrayList.size();
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView itemNameTxt;
        EditText itemAmountEditTxt;
        Switch isAvailableSwitch;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            itemNameTxt = itemView.findViewById(R.id.itemNameTxt);
            itemAmountEditTxt = itemView.findViewById(R.id.itemAmountEditTxt);
            isAvailableSwitch = itemView.findViewById(R.id.isAvailableSwitch);
        }
    }
}
公共类OrderItemRecyclerAdapter扩展了RecyclerView.Adapter{ TextView orderAmountTxt、orderItemsTxt; 语境; ArrayList项目ArrayList; ArrayList itemAmountArray; ArrayList itemAvailableArray; TextView orderSaveTxtBtn; public OrderItemRecyclerAdapter(TextView orderAmountTxt、TextView orderItemsTxt、Context myContext、ArrayList itemArrayList、ArrayList itemAmountArray、ArrayList itemAvailableArray、TextView orderSaveTxtBtn){ this.orderAmountTxt=orderAmountTxt; this.orderItemsTxt=orderItemsTxt; this.myContext=myContext; this.itemArrayList=itemArrayList; this.itemAmountArray=itemAmountArray; this.itemAvailableArray=itemAvailableArray; this.orderSaveTxtBtn=orderSaveTxtBtn; } @非空 @凌驾 public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){ 视图=LayoutFlater.from(myContext).充气(R.layout.itemview\u列表,父项,false); final OrderItemRecyclerAdapter.ViewHolder vHolder=新的ViewHolder(视图); 返回vHolder; } @凌驾 public void onBindViewHolder(@NonNull ViewHolder,int位置){ holder.setIsRecyclable(假); itemAvailableArray.add(位置,itemArrayList.get(位置).isItemAvailable()); add(position,itemArrayList.get(position.getAmount()); holder.itemNameTxt.setText(itemArrayList.get(position.getItemName()); holder.isAvailableSwitch.setChecked(itemArrayList.get(position.isItemAvailable()); holder.itemAmountEditTxt.setText(String.valueOf(itemArrayList.get(position.getAmount())); } @凌驾 公共长getItemId(int位置){ 返回位置; } @凌驾 public int getItemCount(){ 返回itemArrayList.size(); } @凌驾 public int getItemViewType(int位置){ 返回位置; } 公共静态类ViewHolder扩展了RecyclerView.ViewHolder{ TextView itemNameTxt; EditText itemAmountEditTxt; 开关是可用的开关; 公共视图持有者(@NonNull View itemView){ 超级(项目视图); itemNameTxt=itemView.findViewById(R.id.itemNameTxt); itemAmountEditTxt=itemView.findViewById(R.id.itemAmountEditTxt); isAvailableSwitch=itemView.findViewById(R.id.isAvailableSwitch); } } }
请查看此代码。

尝试使用holder.getAdapterPosition获取位置

public class OrderItemRecyclerAdapter extends RecyclerView.Adapter<OrderItemRecyclerAdapter.ViewHolder> {
    TextView orderAmountTxt, orderItemsTxt;
    Context myContext;
    ArrayList<ItemsGetterSetter> itemArrayList;
    ArrayList<Integer> itemAmountArray;
    ArrayList<Boolean> itemAvailableArray;
    TextView orderSaveTxtBtn;

    public OrderItemRecyclerAdapter(TextView orderAmountTxt, TextView orderItemsTxt, Context myContext, ArrayList<ItemsGetterSetter> itemArrayList, ArrayList<Integer> itemAmountArray, ArrayList<Boolean> itemAvailableArray, TextView orderSaveTxtBtn) {
        this.orderAmountTxt = orderAmountTxt;
        this.orderItemsTxt = orderItemsTxt;
        this.myContext = myContext;
        this.itemArrayList = itemArrayList;
        this.itemAmountArray = itemAmountArray;
        this.itemAvailableArray = itemAvailableArray;
        this.orderSaveTxtBtn = orderSaveTxtBtn;
    }



    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(myContext).inflate(R.layout.itemview_list, parent, false);
        final OrderItemRecyclerAdapter.ViewHolder vHolder = new ViewHolder(view);


        return vHolder;

    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.setIsRecyclable(false);
        itemAvailableArray.add(position, itemArrayList.get(position).isItemAvailable());
        itemAmountArray.add(position, itemArrayList.get(position).getAmount());
        holder.itemNameTxt.setText(itemArrayList.get(position).getItemName());
        holder.isAvailableSwitch.setChecked(itemArrayList.get(position).isItemAvailable());
        holder.itemAmountEditTxt.setText(String.valueOf(itemArrayList.get(position).getAmount()));

    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemCount() {
        return itemArrayList.size();
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView itemNameTxt;
        EditText itemAmountEditTxt;
        Switch isAvailableSwitch;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            itemNameTxt = itemView.findViewById(R.id.itemNameTxt);
            itemAmountEditTxt = itemView.findViewById(R.id.itemAmountEditTxt);
            isAvailableSwitch = itemView.findViewById(R.id.isAvailableSwitch);
        }
    }
}
        @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            holder.setIsRecyclable(false);
            ItemsGetterSetter item = itemArrayList.get(holder.getAdapterPosition())
    
            itemAvailableArray.add(holder.getAdapterPosition(), item.isItemAvailable());
            itemAmountArray.add(holder.getAdapterPosition(), item.getAmount());
            holder.itemNameTxt.setText(item.getItemName());
            holder.isAvailableSwitch.setChecked(item.isItemAvailable());
            holder.itemAmountEditTxt.setText(String.valueOf(item.getAmount()));
    
        }

按照您的建议修改代码后,当我滚动视图时,仍会反映起始值。