В корзине не может быть товаров на данный момент, когда я go возвращаюсь на страницу меню и добавляю новые товары - PullRequest
0 голосов
/ 31 марта 2020

Я создал приложение для корзины покупок, и оно может добавлять товары в корзину. Но проблема в том, что он не может добавить еще один новый элемент, когда я go возвращаюсь на страницу меню. https://i.stack.imgur.com/Nkxob.jpg

https://i.stack.imgur.com/j3Gh4.jpg

Итак, это сработало впервые, когда я добавил: «Ледяной кофе для 3 и красный чай» за 2 "в корзину.

Затем, когда я go вернусь на страницу меню и добавлю еще один новый пункт:" Черный чай на 5 и Зеленый на 2 ". Затем новые предметы можно добавить в Корзина. Но для «Ледяного кофе и красного чая» было изменено количество до 1. Оно не может сохранить последнее количество. https://i.stack.imgur.com/K2fcC.jpg

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

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).

Может кто-нибудь помочь мне с этой проблемой? Спасибо.

1 Ответ

1 голос
/ 31 марта 2020

То, что private List<CartItem> getOrganizedAddedItems() и onCreate() - оба сами по себе методы, так что вы не будете добавлять метод внутри них. Похоже, вы создаете ListView и добавляете к нему строки, каждая строка содержит объект CartItem.

Если это правильно, то это вложенное для l oop

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 и изменен при необходимости. В свою очередь, это даст вам более легкий доступ к настройке и получению количеств, не требует новых методов и, в качестве бонуса, исключит необходимость использования вложенных циклов, которые повысят вашу производительность (в данном случае это довольно незначительно, но все же лучше использовать).

В последнем абзаце вашего вопроса это, кажется, отдельная проблема, но не совсем понятно, о чем вы спрашиваете, и вам нужно будет добавить более подробную информацию о том, как вы сохраняете список CartItem как в отличие от MenuItem и того, что вы пытаетесь достичь, чтобы получить больше помощи.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...