android

[Android / RecyclerView] #2 밀어서 아이템 삭제 구현

Shin_lab 2020. 2. 5. 14:47

1. Custom Adapter에 삭제를 위한 함수를 추가한다.

  • #1 을 통해 제작된 코드에 추가
// 내부 데이터 값 제거
fun removeTask(position: Int) {
	tasks.removeAt(position)

	notifyDataSetChanged()
}

 

2. ItemTouchHelper 클래스 구현

  • ItemTouchHelper.SimpleCallback 구현 (드래그 방향과 스와이프 방향 설정)
  • attachToRecyclerView를 통해 RecyclerView와 연동 
  • onSwiped에서 Adapter에 삭제에 대한 처리 함수 호출
fun initRecyclerView() {
  // Recycler View에 Custom Adapter 설정
  rv_example_recyclerview.adapter = RvExampleDefaultAdapter()
  // Adapter 초기 데이터 설정
  (rv_example_recyclerview.adapter as RvExampleDefaultAdapter).setTaskList(viewModel.taskList)

  // ItemTouchHelper 구현 (SDK Version 22부터 사용 가능)
  ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) {
    override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
      return true
    }

    override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
      // Adapter에 아이템 삭제 요청
      (rv_example_recyclerview.adapter as RvExampleDefaultAdapter).removeTask(viewHolder.adapterPosition)
    }	
  }).apply {
    // ItemTouchHelper에 RecyclerView 설정
    attachToRecyclerView(rv_example_recyclerview)
  }
}

 

RecyclerView