2016-08-09 2 views
0

Ich habe ein Problem. Wenn ich auf eine Erhöhungstaste klicke, erhöht sich auch die Artikelmenge. Wenn ich auf den Dekrement-Button klicke, bekomme ich das gleiche Ergebnis. Hier ist, wo ich erkläre die ArrayList<>:Erhöhen und Verringern einer Menge in einem RecyclerView

public class MyAdapter extends RecyclerView.Adapter<MyHolder> { 

public static Context c; 
int quantity=0; 
public static int qty,cty,mty=0,qty1; 
public static int sendcost; 
public static String curry; 
MyHolder holder; 

public ArrayList<Integer> quantity1 = new ArrayList<Integer>(); 

private List<Spacecraft> spacecrafts = new ArrayList<>(); 
CustomButtonListener customButtonListener; 

private boolean mShowQuantity; 

public MyAdapter(Context c, ArrayList<Spacecraft> spacecrafts, boolean showQuantity) {//ArrayList<ShoppingCartEntry> showQuantity , boolean showQuantity 
    MyAdapter.c = c; 
    this.spacecrafts = spacecrafts; 
    this.mShowQuantity = showQuantity; 

    for(int i =0; i< spacecrafts.size();i++) 
    { 
     quantity1.add(0); 
     //quantity[i]=0; 
    } 

} 

Dies ist, wo ich das organisieren RecyclerView:

@Override 
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.model, parent, false); 


    return new MyHolder(v); 
} 

@Override 
public void onBindViewHolder(final MyHolder holder, final int position) { 

    final Spacecraft s = spacecrafts.get(position); 



    holder.nameTxt.setText(s.getName()); 
    PicassoClient.downloadImage(c, s.getImageUrl(), holder.img); 
    holder.propellentTxt.setText(s.getPropellant()); 
    holder.descTxt.setText(s.getDescription()); 
    holder.carbohydratesTxt.setText(s.getCarbohydrates()); 
    holder.fatcontentTxt.setText(s.getFatcontent()); 
    holder.minaralsTxt.setText(s.getMinarals()); 
    holder.costTxt.setText("" + s.getCost()); 
    holder.rateTxt.getText().toString(); 

    try{ 

     holder.rateTxt.setText(quantity1.get(position)+""); 


    }catch(Exception e){ 
     e.printStackTrace(); 
    } 


    MyHolder.btn_plus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      quantity = Integer.parseInt(holder.rateTxt.getText().toString()); 

      cty = Integer.parseInt(holder.costTxt.getText().toString()); 

      curry =holder.nameTxt.getText().toString(); 

      qty1 = 1; 

      quantity = quantity + 1; 


      holder.rateTxt.setText(String.valueOf(quantity));//quantity 

      sendcost = quantity * cty;//single item cost 


      mty = mty + cty * qty1;// Total Cost 




      MainActivity.Totalcost.setText("Total cost :" + String.valueOf(mty)); 

      ShoppingCartHelper.setQuantity(s, quantity); 


     } 
    }); 

Hier ist meine Abnahme Taste:

MyHolder.btn_minus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v1) { 

      qty1=1; 
      quantity = Integer.parseInt(holder.rateTxt.getText().toString()); 
      cty = Integer.parseInt(holder.costTxt.getText().toString()); 
      if(quantity == 0) 
      { 

      } 
      else 
      { 
       quantity = quantity - 1; 

       holder.rateTxt.setText(String.valueOf(quantity)); 

       mty =mty - cty*qty1; 



       MainActivity.Totalcost.setText("Total cost :" + String.valueOf(mty)); 



       ShoppingCartHelper.setQuantity(s, quantity); 


      } 




     } 



    }); 

    holder.quan.setVisibility(View.GONE); 
    return; 
} 

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

Vorschläge, wie das zu machen Taste verkleinern?

+1

Sie müssen Ihre Arraylist jedes Mal aktualisieren, wenn Sie die Menge erhöhen oder verringern. Nach dem Aktualisieren des Listenaufrufs notifyDataSetChanged(); –

+0

danke, mein Herr. fügen Sie bitte etwas Code hinzu, weil ich zu Android neu bin. –

+1

quantity1.set (Position, Quantität); notifyDataSetChanged(); –

Antwort

1

Basierend auf den Informationen in den Kommentaren sind sie alle genau. Sie müssen die ArrayList<> jedes Mal aktualisieren, wenn Sie die Mengen erhöhen oder verringern. Nachdem Sie das tun, müssen Sie Ihre RecyclerView s Adapter wie so benachrichtigen:

quantity1.set(position, quantity); 
notifyDataSetChanged(); 

Wenn Sie die ArrayList<> aktualisieren, dass alle neuen Änderungen vorgenommen wurden in der RecyclerView erscheinen würde.

+0

Ich habe es versucht. aber, es hat nicht richtig funktioniert. –

+0

Dann muss im Code etwas anderes falsch sein, das Sie herausfinden müssen. – Razor

+0

ok Herr, ich werde sehen, und ich werde Code aktualisieren .. –

Verwandte Themen