ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드] RecyclerView에서 아이템 삭제 시 position 문제
    카테고리 없음 2024. 4. 16. 11:37

    문제

    아이템 삭제 시 원하는 아이템이 아닌 다른 position의 아이템이 제거되었다.

     

    해결법

    holder.adapterPosition를 사용하니 정확한 어탭터 위치를 가져올 수 있었다.
    (단순히 position만 넘겨서 추가/제거를 할 때 화면에서 보이는 것과 Adpater의 내용이 맞지 않을 수 있다.)

    class ProductAdapter(
        private val products: MutableList<Product>,
        private val clickScope: (Int, Product) -> Unit,
        private val longClickScope: (Int, Product) -> Unit
    ) : RecyclerView.Adapter<ProductViewHolder>() {
    
        private lateinit var parrentContext: Context
    
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
            // ..생략
        }
    
        override fun onBindViewHolder(holder: ProductViewHolder, position: Int) = with(holder) {
            val product = products[position]
            holder.itemView.apply {
                setOnClickListener {
                    // 문제 해결 전엔 holder.adapterPosition이 아닌 position으로 썼다.
                    clickScope(holder.adapterPosition, product)
                }
                setOnLongClickListener {
                    longClickScope(holder.adapterPosition, product)
                    return@setOnLongClickListener true
                }
            }
            // ..생략
        }
        
        fun deleteProduct(position: Int, product: Product) {
            products.remove(product)
            notifyItemRemoved(position)
            notifyItemChanged(position)
        }
     }
Designed by Tistory.