gpt4 book ai didi

java - 当我返回菜单页面并添加新商品时,购物车无法容纳当前商品

转载 作者:行者123 更新时间:2023-12-02 08:48:19 25 4
gpt4 key购买 nike

我创建了一个购物车应用程序,它可以将商品添加到购物车。但问题是当我返回菜单页面时它无法添加另一个新项目。 /image/Nkxob.jpg

/image/j3Gh4.jpg

所以,当我将“冰咖啡 3 份和红茶 2 份”添加到购物车时,它第一次起作用了。

然后,当我返回菜单页面并添加另一个新商品时:“红茶 5 份,绿茶 2 份”。然后可以将新商品添加到购物车。但“冰咖啡红茶”的数量改为1。无法保留最后的数量。 /image/K2fcC.jpg

如何解决此问题,以便它可以保存当前数量的项目,并在返回菜单页面时添加另一个新项目?

public class CartActivity extends AppCompatActivity {
ListView cartListView;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.cart, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.cart_delete_item:
Main.getAddedItems().clear();
Toast.makeText(this, "The cart has been cleared", Toast.LENGTH_SHORT).show();
CartAdapter cartAdapter = new CartAdapter(this, getOrganizedAddedItems());
cartListView.setAdapter(cartAdapter); //HW log---Yes or No
break;
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
break;
}
return true;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
cartListView = findViewById(R.id.cart_listView);

CartAdapter cartAdapter = new CartAdapter(this, getOrganizedAddedItems());
cartListView.setAdapter(cartAdapter);
}

private List<CartItem> getOrganizedAddedItems() {
List<com.example.shoppingcar.MenuItem> addedItems = Main.getAddedItems();
List<CartItem> organizedAddedItems = new ArrayList<>();
int quantity = 1;
double totalPrice;

for (int i = 0; i < addedItems.size(); i++) {
com.example.shoppingcar.MenuItem currentMenuItem = addedItems.get(i);
for (int y = i + 1; y < addedItems.size(); y++) {
if (currentMenuItem.getName().equals(addedItems.get(y).getName())) {
quantity++;
addedItems.remove(y);
y--;
}
}
totalPrice = currentMenuItem.getPrice() * quantity;
organizedAddedItems.add(new CartItem(currentMenuItem.getName(), quantity, totalPrice));
quantity = 1;
}
return organizedAddedItems;
}

}

我想我需要创建一个方法或其他东西来保存 private List<CartItem> getOrganizedAddedItems() 的这个方法但我不知道哪种方法可以工作,以及我需要将新方法放入代码中的何处。我的意思是我是否将新方法放入 private List<CartItem> getOrganizedAddedItems() 中或 protected void onCreate(Bundle savedInstanceState) 内.

有人可以帮我解决这个问题吗?谢谢。

最佳答案

那个private List<CartItem> getOrganizedAddedItems()onCreate()本身都是方法,因此您不会在其中添加方法。看起来您正在创建一个 ListView,并向其中添加行,每行都包含一个 CartItem 对象。

如果这是正确的,那么这个嵌套的 for 循环

for (int y = i + 1; y < addedItems.size(); y++) {
if (currentMenuItem.getName().equals(addedItems.get(y).getName())) {
quantity++;
addedItems.remove(y);
y--;
}
}

是不必要的,你可以使用类似的东西:

for( MenuItem currentMenuItem : addedItems ){
totalPrice = currentMenuItem.getPrice() * currentMenuItem.getQuantity();
organizedAddedItems.add(new CartItem(currentMenuItem.getName(), quantity, totalPrice));
}

这需要对 Menuitem 进行一些小的更改,以向其中添加一个数量参数,该参数可以初始化为 1 并根据需要进行更改。作为返回,这将使您更容易访问设置和检索数量,不需要新的方法,并且作为奖励消除了嵌套 for 循环的需要,这将提高您的性能(当然,在这种情况下相当轻微,但仍然是更好的实践)。

对于您问题的最后一段,这似乎是一个单独的问题,但不太清楚您要问什么,您需要添加更多有关如何存储 CartItem 列表而不是MenuItem 以及您想要实现的目标以获得更多帮助。

此外,您可以通过完全删除 CartItem 并简单地保留一个类变量来跟踪所有对象的总价格来进一步简化代码,但同样,要确定您必须描述进一步分析你的代码结构。

关于java - 当我返回菜单页面并添加新商品时,购物车无法容纳当前商品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60942551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com