개발을 하다보면 아이템 리스트를 삭제할 일이 많습니다. 삭제하는 방법은 많은 방법이 있지만, 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
을 호출하면 됩니다. 추가적으로 콜백되었을 때 실행해야 할 부분도 저 부분에 구현하면 됩니다.