2016-04-12 3 views
1

Ich arbeite an einem POS-Verwaltungssystem, bei dem der Benutzer einen Artikel aus einer Produktliste auswählen und die ausgewählten Werte in eine Checkliste hinzufügen kann. Ich kann erfolgreich einen neuen Artikel in die Checkliste nach einem Klick auf die Produktliste, aber kann nicht eine Checkliste Artikel Menge, die bereits zuvor hinzugefügt wurde. Siehe das Bild für eine klare Demonstration,Die Menge des vorhandenen Listenelements aktualisieren, anstatt ein neues Element hinzuzufügen.

Screenshot

Aus dem Bild können Sie sehen, dass jedes Element Produkt wurde als neues Element in Checkliste hinzugefügt stattdessen die Menge der Aktualisierung.

Ich suche nach einer Lösung, um die Checklistenmenge zu aktualisieren, nachdem ich auf einen Artikel aus der Produktliste geklickt habe.

Hier ist meine auf Klick-Listener für das Produktliste recyclerview,

recyclerProducts.addOnItemTouchListener(
       new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() { 
        @Override 
        public void onItemClick(View view, int position) { 
         // TODO Handle item click 

         // productList is the arraylist used in product list 
         Products product = productList.get(position); 

         Contents c = new Contents(); 
         c.setTitle(product.getName()); 
         c.setQuantity(product.getQuantity()); 
         orderList.add(c); 
         recyclerListAdapter.notifyDataSetChanged(); 

        } 
       }) 
     ); 

Hier ist der Adapter für Checkliste,

private List<Contents> contentsList; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 

     public TextView title; 
     public TextView quantity; 

     public MyViewHolder(View view) { 
      super(view); 
      title = (TextView) view.findViewById(R.id.txtTitle); 
      quantity = (TextView) view.findViewById(R.id.txtQuantity); 
     } 
    } 

    public RecyclerListAdapter(List<Contents> contentsList) { 
     this.contentsList = contentsList; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_product, parent, false); 
     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     Contents contents = contentsList.get(position); 

     holder.title.setText(contents.getTitle()); 
     holder.quantity.setText("1"); 
    } 

    @Override 
    public int getItemCount() { 
     return contentsList.size(); 
    } 
+1

Sie werden nicht viel Hilfe bekommen, ohne die Implementierung/den Code zu teilen. Bitte mach es. – alan7678

+1

Bitte den entsprechenden Code hinzufügen. –

+0

Frage aktualisiert mit Codes! – user2582686

Antwort

1

etwas tun sollten stattdessen

for(Contents contents : orderList){ 
    if (contents.getTitle().equals(product.getName())){ 
     contents.setQuantity(product.getQuantity()) 
     recyclerListAdapter.notifyDataSetChanged(); 
     return; 
    } 
//assume existing item was not found and add as before 
Contents c = new Contents(); 
c.setTitle(product.getName()); 
c.setQuantity(product.getQuantity()); 
orderList.add(c); 
recyclerListAdapter.notifyDataSetChanged(); 
return; 

Verwendung Eine hashmap als Container anstelle einer Liste wäre eine bessere Option, da ich Produkttyp annahm Es/Namen sind einzigartig.

Deklaration der Karte.

Map<String,Contents> contentsMap = new HashMap<>(); 

Nutzungs

Contents contents = contentsMap.get(product.getName()); 
    if (contents != null){ 
     contents.setQuantity(product.getQuantity());//update existing quantity 
     recyclerListAdapter.notifyDataSetChanged(); 
    } else{ 
     Contents newContents = new Contents(); 
     newContents.setTitle(product.getName()); 
     newContents.setQuantity(product.getQuantity()); 
     contentsMap.put(product.getName(),newContents); 
     recyclerListAdapter.notifyDataSetChanged(); 
    } 

Hinweis eine Hash-Karte benötigt Iterieren nicht ein Bündel von Werten über die Menge zu aktualisieren. Wenn Sie über die Werte iterieren müssen, können Sie die map.values ​​() -Methode wie folgt verwenden.

for (Contents contents: contentsMap.values()){ 
    //doSomething with contents, ie. create a view 
} 
+0

Würde es Ihnen etwas ausmachen, ein Beispiel für die Verwendung der Hashmap zu geben? – user2582686

+0

Ein Beispiel hinzugefügt. – alan7678

+0

Eine letzte Frage, Wie bekomme ich den einzelnen hashmap Artikel zum Setzen der Textansicht in onBindViewHolder() -Methode? Zuvor habe ich die Items über, Inhalt contents = contentsList erhalten.bekommen (Position); halter.title.setText (contents.getTitle()); @ alan7678 – user2582686

0

Ich denke, was Sie hier tun möchte, ist in Ihren Warenkorb (Container, der Ihre Artikel hält), möchten Sie Artikel-ID kennen und da Sie bereits das Produkt-ID in Ihrer ursprünglichen Liste kennen, können Sie überprüfen, Jedes Mal, wenn Sie ein neues Element hinzufügen, wenn es bereits existiert, und wenn dies der Fall ist, aktualisieren Sie es, anstatt ein neues hinzuzufügen.

Ich gehe davon aus, dass Sie die Daten (für jeden Auftrag) in einer lokalen Tabelle mit Spalten speichern. Sie müssen also nur nach diesem bestimmten Element suchen und aktualisieren, wenn es bereits existiert.

Nur meine zwei Cent und ich hoffe, es hilft!

Viel Glück und gute Programmierung!

Verwandte Themen