我正在开发一个Android和新手的购物车应用程序。我现在面临一个问题。 我可以添加一个项目,然后将其添加到购物车中。我将项目数量添加到购物车后,可以编辑项目的数量或将其从列表视图中删除。
所以我想要的是禁用addToCart按钮(如果它已经存在于购物车中)以避免重复。但每次进入产品都被视为新条目。我想我没有正确引用它。任何帮助将不胜感激。
这是每次按下某个项目时调用的活动(例如:Dell内置笔记本电脑类别)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.productdetails);
LayoutInflater li;
final List<Product> cart = ShoppingCartHelper.getCart();// get all //items from cart
int productIndex = getIntent().getExtras().getInt(
ShoppingCartHelper.PRODUCT_INDEX);// the item no in the list
String PRODUCT_STRING = getIntent().getExtras().getString("PRODUCT");
switch (PRODUCT_STRING) {
case "Laptops":
catalog = ShoppingCartHelper.getLaptopCatalog(getResources())
break;
case "Phones":
catalog = ShoppingCartHelper
.gePhonesCatalog(getResources());
break;
}
final Product selectedProduct=(Product)this.catalog.get(productIndex);
// this declaration of product is taken as a new entry......................
ImageView productImageView = (ImageView) findViewById(R.id.ImageViewProduct);
productImageView.setImageDrawable(selectedProduct.productImage); TextView productTitleTextView = (TextView)findViewById(R.id.TextViewProductTitle);
productTitleTextView.setText(selectedProduct.title);
TextView productDetailsTextView = (TextView) findViewById(R.id.TextViewProductDetails);
productDetailsTextView.setText(selectedProduct.description);
final Button addToCartButton = (Button) findViewById(R.id.ButtonAddToCart);
addToCartButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
cart.add(selectedProduct);
selectedProduct.quantity ++;
finish();
}
});
if(cart.contains(selectedProduct)) {
addToCartButton.setEnabled(false);
addToCartButton.setText("Item in Cart");
}
}
答案 0 :(得分:0)
最快的解决方法是覆盖项目的equals()
。
否则,您的项目的每个实例都将被视为(并且 )与Java的视角不同。
以下是你如何做到的:
// Somewhere in your item's class..
@Override
public boolean equals(Object o) {
if(!(o instanceof YourItem)
return false;
YourItem i = (YourItem) o;
// This line below is based on my assumption, you should change to better suit your usecase.
return this.getItemId() == i.getItemId();
}
当然,在上面的代码中,我假设你的项目有一个项目ID的字段和一个获取它的getter方法。请注意,它可能不适合您,您可能需要对其进行一些调整。