-
[안드로이드] 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) } }