2011-11-18 4 views
3

J'ai un panier avec ListView et je montre les totaux sur le pied de page ListView. j'ai ajouté le point de vue de pied à l'listView en utilisant,android Mise à jour du pied de liste ListView

GetShoppingCartItems - obtient les éléments courants dans le panier

fillBasketSummary créer le pied de page

DoRemoveCartItem - de retirer l'article du panier

private Handler handler = new Handler() 
    { 

     public void handleMessage(Message msg) 
     { 

       fillBasketSummary() ; 
       dialog.dismiss() ; 


     } 
    } ; 


private void GetShoppingCartItems() 
    { 
     try { 
      WsFpUser wsfp = myapp.getWsFP_User() ; 
      products = wsfp.GetBasketOrderItems(loggedInUser.ID); 
     } catch (Exception e) { 

     } 

     handler.sendEmptyMessage(0); 
    } 



private void fillBasketSummary() 
    { 
     try { 

      LayoutInflater inflater = this.getLayoutInflater(); 
      View footerView = inflater.inflate(R.layout.basket_footer, null); 

      ListView lst = (ListView) findViewById(R.id.basket_listItems); 

      lst.addFooterView(footerView); 


      if (adapter != null) 
      { 
       adapter.products.clear() ; 
       adapter.notifyDataSetChanged() ; 
      } 

      if (products != null) 
      { 
       lstProducts = (ListView) findViewById(R.id.basket_listItems); 
       adapter = new ProductsAdapter(getApplicationContext(), products); 
       lstProducts.setAdapter(adapter); 
      } 
      else 
      { 
       // show message "cart empty" 

      } 

      float subTotal = 0.0f ; 

      DecimalFormat df = new DecimalFormat("#0.00"); 


      TextView txtSubTotal = (TextView) footerView.findViewById(R.id.basket_txtSubTotal);   

      if (products != null) 
      { 
       for (int i =0; i< products.size() ; i ++) 
       { 
         float price = Float.parseFloat(product.itemPrice) ; 
         float discount = Float.parseFloat(product.itemDiscount) ; 
         int quantity = Integer.parseInt(product.quantity); 
         subTotal = subTotal + (price - discount) * quantity ; 

       } 

       txtSubTotal.setText("£ " + df.format(subTotal)); 

      } 


     } catch (Exception e) 
     { 
      Log.e("err",e.toString()); 
      e.printStackTrace(); 
     } 



    } 


public void DoRemoveCartItem(final int itemIndex) 
    { 



     dialog = ProgressDialog.show(this, "", 
       "Loading. Please wait...", true); 

     Thread t = new Thread( new Runnable() { 
      public void run() 
      { 
       boolean bRemove = false; 
       WsFpUser wsfpUser = myapp.getWsFP_User() ; 
       CardItem cardItem = products.get(itemIndex); 

       try 
       { 
        bRemove = wsfpUser.RemoveOrderItem(cardItem.orderID); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

       if (bRemove) 
       { 
        GetShoppingCartItems(); 
       } 
       else 
       { 
        // error 
       } 

      } 

     }) ; 
     t.start() ; 



    } 

Pour supprimer des éléments, j'appelle DoRemoveCartItem() puis appelle "GetShoppingCartItems()" pour obtenir la liste courante des éléments, puis reconstruit la liste

Chaque fois que l'utilisateur supprime un élément de la liste, je recalcule les totaux et effectue le processus ci-dessus pour ajouter à nouveau le pied de page.

Le problème est que les valeurs de pied de page ne sont pas mises à jour lorsque des éléments sont supprimés de la liste.

qu'est-ce que j'ai fait de mal?

+1

Où est-ce que vous mettez actuellement à jour votre pied de page? – Reno

+0

Ma conjecture est que vous ne mettez pas à jour la vue de pied de page quand la vue de liste est mise à jour. – AedonEtLIRA

+0

lorsque l'article est retiré du panier. J'appelle le service Web pour obtenir les données actuelles pour le ListView. Après les données reçues, je recharger le listview modifié le code pour montrer ce qui a été fait ... – Janaka

Répondre

0

Il semble que l'ordre dans lequel vous ajoutez le pied de page a un effet sur la façon dont il a été créé. Je l'ai fait ce qui suit pour le faire fonctionner

ListView lst = (ListView) findViewById(R.id.basket_listItems); 



      if (lst.getFooterViewsCount() > 0) 
      { 
       lst.removeFooterView(footerView); 
      } 


      LayoutInflater inflater = this.getLayoutInflater(); 
      footerView = inflater.inflate(R.layout.basket_footer, null); 
      lst.addFooterView(footerView); 

      this.onContentChanged(); 

      if (adapter != null) 
      { 
       ... 

this.onContentChanged(); est la ligne critique.

il semble créer à nouveau le ListView. Je ne suis pas sûr que ce soit la bonne façon de le faire, mais cela a fonctionné pour moi.

Questions connexes