回收器查看对多行的影响,当它应该只影响一行时



我得到了不同产品的回收器视图,每个产品都有数量的编辑文本,当我输入一个产品的数量时,不仅该编辑文本填充,而且每个额外的倍数 11 填充。

例如:我写在第一篇文章的编辑文本中,在第 11 条和第 22 条中将写入相同的数量并发生相同的效果......就像在图片中一样。 这是我在第一个编辑文本中输入的内容 这是我在第 11 篇文章中发现的

这是文章类

public class Article {
public String désignation;
public int colis;
public double prix_unité;
public Article(String désignation, int colis, double prix_unité) {
this.désignation = désignation;
this.colis = colis;
this.prix_unité = prix_unité;
}

}

这是主动性

articles = new ArrayList<>();
CreateArticles();
fab = findViewById(R.id.add);
linearLayout = findViewById(R.id.total);
total_global = findViewById(R.id.prix_global);
prix_global = 0;
recyclerView = this.findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyAdapter(this, articles);
recyclerView.setAdapter(adapter);

和我的适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> {
private ArrayList<Article> articles;
private Context context;
public static class MyHolder extends RecyclerView.ViewHolder{
TextView désignation;
TextView colis;
TextView prix_unité;
TextView total;
EditText quant;

public MyHolder(@NonNull View itemView) {
super(itemView);
désignation = itemView.findViewById(R.id.item_désignation);
colis = itemView.findViewById(R.id.item_colis);
prix_unité = itemView.findViewById(R.id.item_prix_unité);
total = itemView.findViewById(R.id.item_total);
quant = itemView.findViewById(R.id.item_quant);
}
}
public MyAdapter(Context context, ArrayList<Article> articles) {
this.context = context;
this.articles = articles;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new MyHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull final MyHolder holder, final int position) {
holder.désignation.setText(articles.get(position).désignation);
if (articles.get(position).désignation.equals("")) {
holder.colis.setText("");
holder.prix_unité.setText("");
holder.quant.setVisibility(View.INVISIBLE);
} else {
holder.colis.setText("" + articles.get(position).colis);
holder.prix_unité.setText("" + articles.get(position).prix_unité);
}
holder.quant.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (!holder.quant.getText().toString().equals("")) {
int col = articles.get(position).colis;
double pu = articles.get(position).prix_unité;
int qua = Integer.parseInt(holder.quant.getText().toString());
double result = col * qua * pu;
MainActivity.prix_global -= result;
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void afterTextChanged(Editable editable) {
if (holder.quant.getText().toString().equals("")) {
holder.total.setText("");
holder.désignation.setTextColor(context.getColor(android.R.color.darker_gray));
holder.colis.setTextColor(context.getColor(android.R.color.darker_gray));
holder.prix_unité.setTextColor(context.getColor(android.R.color.darker_gray));
} else {
int col = articles.get(position).colis;
double pu = articles.get(position).prix_unité;
int qua = Integer.parseInt(holder.quant.getText().toString());
double result = col * qua * pu;
holder.total.setText("" + result);
holder.désignation.setTextColor(Color.BLACK);
holder.colis.setTextColor(Color.BLACK);
holder.prix_unité.setTextColor(Color.BLACK);
MainActivity.prix_global += result;
}
MainActivity.Total();
}
});
}
@Override
public int getItemCount(){
return articles.size();
}

}

不一致可能是因为 editText 观察器是在onBindViewHolder()中设置的,相反,我建议您在MyHolder类的构造函数中设置观察器。

这样做并使MyHolder类非静态,并从onBindViewHolder()中删除TextWatcher代码:

public class MyHolder extends RecyclerView.ViewHolder{
TextView désignation;
TextView colis;
TextView prix_unité;
TextView total;
EditText quant;

public MyHolder(@NonNull View itemView) {
super(itemView);
désignation = itemView.findViewById(R.id.item_désignation);
colis = itemView.findViewById(R.id.item_colis);
prix_unité = itemView.findViewById(R.id.item_prix_unité);
total = itemView.findViewById(R.id.item_total);
quant = itemView.findViewById(R.id.item_quant);
//here set the text watchers on the quant:
quant.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (!quant.getText().toString().equals("")) {
int col = articles.get(getAdapterPosition()).colis;
double pu = articles.get(getAdapterPosition()).prix_unité;
int qua = Integer.parseInt(quant.getText().toString());
double result = col * qua * pu;
MainActivity.prix_global -= result;
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void afterTextChanged(Editable editable) {
if (quant.getText().toString().equals("")) {
total.setText("");
désignation.setTextColor(context.getColor(android.R.color.darker_gray));
colis.setTextColor(context.getColor(android.R.color.darker_gray));
prix_unité.setTextColor(context.getColor(android.R.color.darker_gray));
} else {
int col = articles.get(getAdapterPosition()).colis;
double pu = articles.get(getAdapterPosition()).prix_unité;
int qua = Integer.parseInt(quant.getText().toString());
double result = col * qua * pu;
total.setText("" + result);
désignation.setTextColor(Color.BLACK);
colis.setTextColor(Color.BLACK);
prix_unité.setTextColor(Color.BLACK);
MainActivity.prix_global += result;
}
MainActivity.Total();
}
});

}
}

最新更新