2015-04-27 2 views
-3

Я пытаюсь удалить объект из расширяемого вида списка. Этот код находится в моем классе адаптера.Удаление элемента из корзины покупок

   deleteIB.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 

         ShoppingCartEntry catalog = ShoppingCartHelper.getByProduct(cat); 
         Product selectedProduct = catalog.getProduct(); 
         selectedProduct = null; 
         _cartList.remove(groupPosition); 
         ProductAdapter.this.notifyDataSetChanged(); 
        } 
       }); 

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

ShoppingCartHelper

public static final String PRODUCT_INDEX = "PRODUCT_INDEX"; 
    private static Map<Product, ShoppingCartEntry> cartMap = new HashMap<Product, ShoppingCartEntry>(); 

    public static void setQuantity(Product product, int quantity) { 
     // Get the current cart entry 
     ShoppingCartEntry curEntry = cartMap.get(product); 

     // If the quantity is zero or less, remove the products 
     if (quantity <= 0) { 
      if (curEntry != null) 
       removeProduct(product); 
      return; 
     } 

     // If a current cart entry doesn't exist, create one 
     if (curEntry == null) { 
      curEntry = new ShoppingCartEntry(product, quantity); 
      cartMap.put(product, curEntry); 
      return; 
     } 

     // Update the quantity 
     curEntry.setQuantity(quantity); 
    } 

    public static int getProductQuantity(Product product) { 
     // Get the current cart entry 
     ShoppingCartEntry curEntry = cartMap.get(product); 

     if (curEntry != null) 
      return curEntry.getQuantity(); 

     return 0; 
    } 

    public static void removeProduct(Product product) { 
     cartMap.remove(product); 
    } 

    public static List<Product> getCartList() { 
     List<Product> cartList = new Vector<Product>(cartMap.keySet().size()); 
     for (Product p : cartMap.keySet()) { 
      cartList.add(p); 
     } 

     return cartList; 
    } 

    public static ShoppingCartEntry getByProduct(Product product) { 
     return cartMap.get(product); 
    } 
} 

ShoppingCartEntry

private Product mProduct; 
    private int mQuantity; 

    public ShoppingCartEntry(Product product, int quantity) { 
     mProduct = product; 
     mQuantity = quantity; 
    } 

    public Product getProduct() { 
     return mProduct; 
    } 

    public int getQuantity() { 
     return mQuantity; 
    } 

    public void setQuantity(int quantity) { 
     mQuantity = quantity; 
    } 

} 
+0

Где вы храпите предметы повозки? – Blackbelt

+0

selectedProduct = null бесполезен в этом контексте, вам, вероятно, нужно что-то вроде catalog.removeProduct() – Egor

+0

@Egor Я получил это сообщение об ошибке, метод removeProduct() не определен для типа ShoppingCartEntry – modabeckham

ответ

1

catalog.getProduct() возвращает продукт, который вы хотите (или первый, независимо от вашего imlpementation есть) и присваивает копию этого значения в переменную selectedProduct. Путем предоставления ему нулевого значения вы аннулируете копию продукта.

Вы должны позвонить catalog.removeProduct или что-то подобное. Рассмотрите возможность использования ProductAdapter для удаления продукта. Каталог будет обновляться автоматически.

0

Причина, по которой элемент добавляется обратно в корзину, заключается в том, что вы никогда не вызывали метод, который удалит ваш продукт из корзины покупок. единственный метод, который вы вызывали, - удалить элемент из списка. Я вижу, что у вас есть метод ShoppingCartHelper.removeProduct (selectedProduct). Вы тоже должны это назвать.

deleteIB.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        ShoppingCartEntry catalog = ShoppingCartHelper.getByProduct(cat); 
        Product selectedProduct = catalog.getProduct(); 
        ShoppingCartHelper.removeProduct(selectedProduct); 
        selectedProduct = null; 
        _cartList.remove(groupPosition); 
        ProductAdapter.this.notifyDataSetChanged(); 
       } 
      }); 
+0

все еще ведет себя так же – modabeckham

+0

, вам нужно создать метод, который удаляет продукт, поступающий из источника. где хранятся продукты? он сохраняется в вашем sqlite? Если это так, вам нужно создать метод, который удалит продукт из sqlite. затем убедитесь, что вы вызываете этот метод в своем клиенте удаления кликов – Genevieve

Смежные вопросы