Swipe

BongKu·2023년 7월 26일
0

Android

목록 보기
12/30
post-thumbnail

개발을 하다보면 아이템 리스트를 삭제할 일이 많습니다. 삭제하는 방법은 많은 방법이 있지만, Swipe 를 활용하면 보다 깔끔하게 삭제할 수 있습니다.

진행중이던 프로젝트를 예를 보겠습니다.

ReviewListRVAdapter.kt

class ReviewListRVAdapter(
    val context: Context,
    val dataSet: List<ReviewEntity>
) :
    RecyclerView.Adapter<ReviewListRVAdapter.ViewHolder>() {
			.	 
			.
    fun removeItem(position: Int) {
        if (position in 0 until dataSet.size) {
            dataSet.toMutableList().removeAt(position)
            notifyItemRemoved(position)
        }
    }
}
			.
			.

Adapter에 아이템을 삭제하는 메서드를 만들어 줍니다.

ReviewFragment.kt

@AndroidEntryPoint
class ReviewFragment : Fragment() {
		.
        .
	private fun setReviewListRV() {
    	 val rvAdapter = ReviewListRVAdapter(requireContext(), reviewList)

        //아이템 스와이프
        val itemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(
            0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
        ) {
            override fun onMove(
                recyclerView: RecyclerView,
                viewHolder: RecyclerView.ViewHolder,
                target: RecyclerView.ViewHolder
            ): Boolean {
                return false
            }

            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
                val position = viewHolder.adapterPosition
                viewModel.deleteReviewData(reviewList[position])
                rvAdapter.removeItem(position)
            }
        })

        itemTouchHelper.attachToRecyclerView(binding.reviewFragmentRV)
        
        //생략
    }
        .
        .
}

ItemTouchHelper 를 사용해서 스와이프 기능을 구현할 수 있습니다. onSwiped 내부는 스와이프시 콜백되는 부분으로 저 부분에서 removeItem 을 호출하면 됩니다. 추가적으로 콜백되었을 때 실행해야 할 부분도 저 부분에 구현하면 됩니다.

profile
화이팅

0개의 댓글