Я делаю приложение, которое добавляет в корзину кучу предметов, теперь у меня есть этот пользовательский интерфейс, который добавляет элемент кнопкой + и удаляет его из массива, если я нажимаю кнопку -, когда 1 находится на количество.
У меня есть массив элементов (ПУНКТ А, ПУНКТ B), я могу добавить количество к этим элементам, поэтому я создал второй массив, в котором хранится имя элемента, количество элемента и элемент цена, я делаю это, чтобы получить базовую c корзину с выбранными предметами.
Таким образом, когда я нажимаю кнопку +, количество увеличивается на моем элементе A, так же, как на элементе B, это работает правильно , но теперь, когда я нажимаю кнопку минус - и количество равно 1, я удаляю этот элемент из массива selecteditem, поэтому теперь у меня есть элемент b с количеством 3, но поскольку я удалил элемент a из этого массива, теперь элемент B находится в позиции 0, это означает, что когда я нажимаю элемент A, чтобы обновить его значение, он будет обновлять значение элемента B, а элемент A будет создан в позиции 2, где находится элемент b, поэтому при обновлении элемента бит будет обновляться вещь A и это продолжается
. Этот код я использую для обновления значений элемента
Адаптер
var productList = mutableListOf<Product>()
var cartProductList = mutableListOf<ProductCartSelected>()
inner class StoreViewHolder(itemView: View): BaseViewHolder<Product>(itemView){
override fun bind(item: Product,position: Int) {
//First button click before select quantity
itemView.btn_action_add.setOnClickListener {
itemView.btn_action_add.visibility = View.GONE
itemView.card_selector_product.visibility = View.VISIBLE
itemClickListener?.onCartClick(item)
}
itemView.btn_increase.setOnClickListener {
val currentQuantity = itemView.txt_quantity.text.toString().toInt()
if(currentQuantity != 20){
val quantity = currentQuantity + 1
display(quantity)
updateProductQuantity(position,quantity)
}
}
itemView.btn_decrease.setOnClickListener {
val currentQuantity = itemView.txt_quantity.text.toString().toInt()
if(currentQuantity == 1){
removeSelectedProduct(position)
}else{
val quantity = currentQuantity - 1
display(quantity)
updateProductQuantity(position,quantity)
}
}
}
fun setItems(selectedProductList: MutableList<Producto>) {
productList = selectedProductList
notifyDataSetChanged()
}
fun setProductSelected(productCartSelected: ProductCartSelected){
cartProductList.add(productCartSelected)
}
fun removeSelectedProduct(position: Int){
cartProductList.removeAt(position)
notifyDataSetChanged()
}
fun updateProductQuantity(position: Int,quantity:Int){
cartProductList[position].quantity = quantity
itemClickListener?.onUpdatedProductQuantity(cartProductList[position])
}
Итак, в основном проблема заключается в том, что я использую removeSelectedProduct(position)
, поскольку он удалит продукт из cartProductList, но сохранит ссылки на индексы productlist, поэтому при обновлении количества по любому другому элементу все индексы меняются, и обновление неправильно
На мой взгляд, я отправил элемент a и элемент B с помощью setItems()
метода
Классы данных
@Parcelize
data class Product(
val name:String = "", val price:Int = 0,val productImage:String = "",val hasDiscount:Boolean = false
) : Parcelable
data class ProductCartSelected(var quantity:Int,var productName: String,var price: Int)
Если требуется какая-либо другая информация, просто спросите мне
спасибо