Ich habe einen RecyclerView implementiert. Ich habe einen eigenen Adapter dafür geschrieben. Es rendert eine Liste von Karten mit einigen TextView und Tasten. Ich habe zwei Buttons in jeder Karte, ein PlusButton und ein MinusButton und ich möchte die Werte in TextViews ändern, je nachdem, wie man auf diese Buttons klickt. Es funktioniert zwar korrekt, aber wenn wir zusammen mit der angeklickten Karte nach unten scrollen, wird auch die textView einer anderen Karte aktualisiert. Ich weiß, dass es passiert, weil die Objekte recycelt werden und ich die Position in meinem Code verwende. Wie verhindere ich, dass die anderen Karten aktualisiert werden? Hier ist der Code:Android RecyclerView, Ansicht basierend auf OnClick ändern.
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final Product product = productList.get(position);
holder.productName.setText(product.getName());
holder.productPrice.setText("$ " + product.getPrice().toString());
holder.productImage.setImageUrl(product.getImage(), holder.imageLoader);
//load image and actions for buttons
array = new int[productList.size()];
holder.plusButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
productList.get(position).setTotal_on_hand(1);
holder.productQty.setText(product.getTotal_on_hand());
this.notify();
Product pr = productList.get(position);
int pos;
if (passList.contains(pr)) {
pos = passList.indexOf(pr);
array[pos]++;
priceTotal = priceTotal + pr.getPrice().floatValue();
qtyTotal++;
holder.productQty.setText(Integer.toString(array[pos]));
} else {
passList.add(pr);
pos = passList.indexOf(pr);
array[pos] = 1;
qtyTotal++;
priceTotal = priceTotal + pr.getPrice().floatValue();
holder.productQty.setText(Integer.toString(array[pos]));
}
callback.deletePressed();
}
});
Sie löst das Problem, das heißt es nicht die anderen Karten in der Recycler Ansicht nicht aktualisiert. Aber wenn ich nach unten scrolle und die Karte aus dem Blickfeld verschwindet und dann zurückscrolle, kommt sie einfach in ihren ursprünglichen Zustand zurück. –
Verfolgen Sie die Dinge, die Sie ändern. Sie können eine neue Arraylist verwenden, um Dinge zu behalten, die Sie je nach Position ändern. –