Проблема заключается в следующей строке: Order order = listData.get(i);
Сначала вы удаляете элемент, а затем пытаетесь получить заказ.
listData.remove(i); // remove item from listData: it will have zero items if earlier, listData had one item
...
Order order = listData.get(i); // get ith order: will crash if listData's size is 0
Размещение listData.remove(i);
в концефункции решит проблему.
Например:
cartViewHolder.removeItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyItemRemoved(i);
notifyItemRangeChanged(i, listData.size());
Order order = listData.get(i);
new Database(cartActivity).clearItem(order);
listData.remove(i);
calculate();
}
});
Редактировать:
Есть еще одна проблема в Calculate ().Вы должны переназначить переменную total
на ноль.
Примерно так:
private void calculate(){
total = 0;
for (Order orders: listData){
total += Integer.parseInt(orders.getPrice()) * Integer.parseInt(orders.getQuantity());
Log.d("GDGDGD", String.valueOf(total));
}
int cgst = (total * 5)/100;
total += cgst;
Locale locale = new Locale("en","IN");
NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
cartActivity.txtTotalPrice.setText(fmt.format(total));
}
И удалить присвоение total = 0;
.Как это:
cartViewHolder.counterButton.setOnValueChangeListener(new ElegantNumberButton.OnValueChangeListener() {
@Override
public void onValueChange(ElegantNumberButton view, int oldValue, int newValue) {
Order order = listData.get(i);
order.setQuantity(String.valueOf(newValue));
new Database(cartActivity).updateCart(order);
calculate();
}
})