Вычисление общей цены из списка RecyclerView

#java #android #list #arraylist #android-recyclerview

#java #Android #Список #arraylist #android-recyclerview

Вопрос:

У меня есть вложенный список, в котором каждый список элементов имеет priceReguler и priceAfterDiscount .

Как рассчитать регулятор общей цены (если priceAfterDiscount == 0)? таким образом, результат будет таким: 363000 158000 = 521000.

или как рассчитать общую цену (если priceAfterDiscount ! = 0)? таким образом, результат будет таким: 363000 119000 = 482000

 @Override
public void onBindViewHolder(@NonNull AdapterHeaderCart.ViewHolder holder, int position) {
    ProductCountry productCountry = productCountryList.get(position);
    List<Product> productList = productCountry.getProductList();

    Log.e("TAG", "onBindViewHolder: "   productList.toString());
}
  

 E/TAG: onBindViewHolder: [{totalAllProduct=0, finalPrice=0, totalPrice=0, image='https://google.com/171212847/file.jpg', images=null, kindId=0, kind=null, description='null', weight=0, source=Source{image = 'null',name = 'Shopciety',link = 'null',id = '0',slug = 'shopciety'}, usdPriceRegular=0.0, sourceLink='null', colors=null, priceRegular=363000, sizes=null, usdPriceAfterDiscount=0, name='4D CITYSCAPE Puzzle - Game of Thrones Winterfell 3D Puzzle', attributes=null, id=141922, sourceId=0, priceAfterDiscount=0, slug='null', isFeatured=false, country='USA'}]
E/TAG: onBindViewHolder: [{totalAllProduct=0, finalPrice=0, totalPrice=0, image='https://google.com/system/media_libraries/268171710/file.jpg', images=null, kindId=0, kind=null, description='null', weight=0, source=Source{image = 'null',name = 'Shopciety',link = 'null',id = '0',slug = 'shopciety'}, usdPriceRegular=0.0, sourceLink='null', colors=null, priceRegular=158000, sizes=null, usdPriceAfterDiscount=0, name='BIOGLAN Supplement - Gummies Probiotic 50 Chocolate Balls', attributes=null, id=142095, sourceId=0, priceAfterDiscount=119000, slug='null', isFeatured=false, country='Australia'}]
  

Комментарии:

1. Вы определенно не хотите делать это в своем адаптере. Если ваш список очень длинный, он будет пересчитываться каждый раз, когда пользователь прокручивает. Выполнение большого количества вычислений в адаптере может привести к замедлению пользовательского интерфейса и задержкам. Вы должны взять исходный список и сопоставить его со списком, который может обработать адаптер (перед передачей его адаптеру). Этот список будет содержать только то, что нужно адаптеру, включая рассчитанную цену.

Ответ №1:

как насчет этого?

 @Override
public void onBindViewHolder(@NonNull AdapterHeaderCart.ViewHolder holder, int position) {
    ProductCountry productCountry = productCountryList.get(position);
    List<Product> productList = productCountry.getProductList();

    Log.e("TAG", "onBindViewHolder: "   productList.toString());

    int sumPriceReguler = 0;
    int finalPosition = 0;
    if (productList.size() > 2) { //for get beforeItem
        for(int i = 0 ; i < productList.size() ; i   ) {
            Product product = productList.get(finalPosition);
            int beforeProductPrice = productList.get(position-1).getPriceReguler();
            if (product.getPriceAfterDiscount == 0) {
                sumPriceReguler = beforeProductPrice   product.getPriceReguler();
            } else {
                sumPriceReguler = beforeProductPrice   product.getPriceAfterDiscount()
            }
            finalPosition  ;
        }
    }
    // use sumPriceReguler as you want
}
  

Комментарии:

1. Я получаю сообщение об ошибке, подобное этому «java.lang. Исключение IndexOutOfBoundsException: Индекс: 1, Размер: 1″в продукте product = ProductList.get(позиция);

2. о, извините, я перепутал, что ваш список не является списком продуктов. Я отредактирую