Android recyclerview удалить элементJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Android recyclerview удалить элемент

Сообщение Anonymous »

`У меня есть представление переработчика, и я хочу удалить из него элемент, но после удаления мое приложение выходит из строя. Я использую Firebase для хранения данных, а также включаюDeleteClickListener, но у меня не работает.
каждый раз, когда я удаляю элемент, он удаляется из корзины, но приложение также вылетает.
выдает мне эту ошибку

Код: Выделить всё

 FATAL EXCEPTION: main
Process: com.example.hungryhopper, PID: 8373
java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 0
Я убедился, что мой список инициализирован, и использовал журнал, чтобы убедиться, что и позиция, и список содержат значения.

Код: Выделить всё

My Adapter:
class CartAdapter(
private val cartItems: MutableList,
private val cartItemsPrice: MutableList,
private val cartDescriptions: MutableList,
private val cartImages: MutableList,
private val cartQuantity: MutableList,
private val cartIngredients: MutableList,
private val context: Context,
private val onDeleteClickListener: (position: Int) -> Unit
) : RecyclerView.Adapter() {
private val auth = FirebaseAuth.getInstance()
init {
val database = FirebaseDatabase.getInstance()
val userId = auth.currentUser?.uid ?: ""
val cartItemNumber = cartItems.size
itemQuantities = IntArray(cartItemNumber) { 1 }
cartItemsReference =database.reference.child(USER_NODE).child(userId).child(CARTITEM_NODE)
}
companion object {
private var itemQuantities = intArrayOf()
private lateinit var cartItemsReference: DatabaseReference
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CartViewHolder {
return CartViewHolder(
CartItemBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
override fun getItemCount(): Int {
return cartItems.size
}
override fun onBindViewHolder(holder: CartViewHolder, position: Int) {
holder.bind(position)
}
inner class CartViewHolder(private val binding: CartItemBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(position: Int) {
binding.apply {
cartFoodName.text = cartItems[position]
cartItemPrice.text = cartItemsPrice[position]
quantity.text = itemQuantities[position].toString()
val uriString = cartImages[position]
val uri = Uri.parse(uriString.toString())
Glide.with(context).load(uri).into(cartImage)
minusButton.setOnClickListener {
decreaseQuantity(position)
}
plusButton.setOnClickListener {
increaseQuantity(position)
}
deleteButton.setOnClickListener {
deleteItem(position)
}
}
}
private fun decreaseQuantity(position: Int) {
if (itemQuantities[position] > 1) {
itemQuantities[position]--
cartQuantity[position] = itemQuantities[position]
binding.quantity.text = itemQuantities[position].toString()
}
}
private fun increaseQuantity(position: Int) {
if (itemQuantities[position] < 10) {
itemQuantities[position]++
cartQuantity[position] = itemQuantities[position]
binding.quantity.text = itemQuantities[position].toString()
}
}
private fun deleteItem(position: Int) {
val positionRetrieve = position
getUniqueAtPosition(positionRetrieve) { uniqueKey ->
if (uniqueKey != null) {
removeItem(position, uniqueKey)
}
}
}
}
private fun removeItem(position: Int, uniqueKey: String) {
cartItemsReference.child(uniqueKey).removeValue().addOnSuccessListener {
cartItems.removeAt(position)
cartImages.removeAt(position)
cartDescriptions.removeAt(position)
cartQuantity.removeAt(position)
cartItemsPrice.removeAt(position)
cartIngredients.removeAt(position)
itemQuantities = itemQuantities.filterIndexed { index, i ->  index != position  }.toIntArray()
notifyItemRemoved(position)
notifyItemRangeChanged(position, cartItems.size)
Toast.makeText(context, " Item Deleted", Toast.LENGTH_SHORT).show()
}.addOnFailureListener {
Toast.makeText(context, "Failed to Delete", Toast.LENGTH_SHORT).show()
}
}
private fun getUniqueAtPosition(i: Int, onComplete: (String?) -> Unit) {
cartItemsReference.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
var uniqueKey: String? = null
snapshot.children.forEachIndexed { index, dataSnapshot ->
if (index == i) {
uniqueKey = dataSnapshot.key
return@forEachIndexed
}
}
onComplete(uniqueKey)
}
override fun onCancelled(error: DatabaseError) {}
})
}

fun getUpdatedItemQuantities(): MutableList {
val itemQuantity = mutableListOf()
itemQuantity.addAll(cartQuantity)
return itemQuantity
}
}
Как я могу удалить что-то из него, чтобы мое приложение не вылетало. Я могу редактировать количество, но не могу удалить товар.

Подробнее здесь: https://stackoverflow.com/questions/784 ... oving-item
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»