2016-07-10 13 views
0

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(); 



     } 
    }); 

Antwort

1

versuchen, diese auf Ihrem onBindViewHolder (ViewHolder Halter, int Position) Methode

@Override 
public void onBindViewHolder(final Helper holder, int position) { 
    holder.setIsRecyclable(false); 
} 
+0

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. –

+0

Verfolgen Sie die Dinge, die Sie ändern. Sie können eine neue Arraylist verwenden, um Dinge zu behalten, die Sie je nach Position ändern. –

Verwandte Themen