Android 滚动时,RecyclerView值变为空,有些值更改为旧值
我已经创建了OrderItemRecyclerAdapter。在Editetext中输入值后,当我滚动它时,值变为空表示它将替换为第一个值。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;
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()));
}
按照您的建议修改代码后,当我滚动视图时,仍会反映起始值。