Android

[Android] 리스트뷰 Listview 목록 변경 반영하기 notifyDataSetChanged()

은 딩 2022. 12. 31. 01:31

Listview의 내용물로 사용되는 ArrayList의 목록/내용이 변경되면, listview에 연결된  Adapter에게, 변경사항을 반영해달라고 요청해야 함(새로고침)

=> 내용 변경 : 목록 삭제 / 추가 / 일부 변경


사용법

// 내용물 변경 코드 실행 시점 바로 뒤에
어댑터변수.notifyDataSetChanged()

특이사항

  • ArrayList의 내용물에 변경을 준다면, 습관적으로 같이 적어주자.
    => 목록의 내용물이 변경되었는데 어댑터가 인지 못한채로 놔두면, 다음 터치에서 앱이 죽음
  • 어댑터변수의 새로고침 기능은 많은 곳에서(다양한 함수에서) 사용하게 됨
    => 어댑터 변수는 Activity 내부의 어느곳에서라도 사용할 수 있도록, 멤버변수로 만드는 게 유리
    => 멤버변수 단에서는 어댑터변수의 초기화가 불가능
    => 번거로워도, lateinit var를 사용해서 멤버변수로 만드는 이유

        viewBinding.studentListView.setOnItemLongClickListener { parent, view, position, id ->
            mStudentList.removeAt(position)
            mAdapter.notifyDataSetChanged() // 새로고침

            return@setOnItemLongClickListener true
        }

참고 : class101+ 코딩티처 지니 강의