Обновление нижнего колонтитула Android ListView - PullRequest
3 голосов
/ 18 ноября 2011

У меня есть корзина с ListView, и я показываю итоги в нижнем колонтитуле ListView.я добавил нижний колонтитул в listView, используя

GetShoppingCartItems - получает текущие элементы в корзине

fillBasketSummary создать нижний колонтитул

DoRemoveCartItem - удалить элемент из корзины

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



   }

Чтобы удалить элементы, я вызываю DoRemoveCartItem (), затем вызываю «GetShoppingCartItems ()», чтобы получить текущий список элементов, затем он перестраивает список

Каждый раз, когда пользователь удаляет элемент из списка, я пересчитываюитоги и выполните описанный выше процесс, чтобы снова добавить нижний колонтитул.

Проблема в том, что значения нижнего колонтитула не обновляются при удалении элементов из списка.

что я сделал не так?

1 Ответ

0 голосов
/ 19 ноября 2011

кажется, что порядок добавления нижнего колонтитула влияет на его создание.Я сделал следующее, чтобы заставить его работать

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 (); - критическая строка.

кажется, что снова создается ListView.Я не уверен, что это правильный способ сделать это, но у меня это сработало.

...