[Android] recyclerView 생성시 중간부터 생성될때
recyclerView 아이템이 뿌려줄때 리사이클러뷰의 처음이 아닌 중간부분 부터 보이는 문제가 발생했다.
이 문제는 아이템이 생성될때 실행되는 순서에 문제가 있었던것이다!
어느것이 먼저 동작을 실행할지순서를정해주는 방법으로 오류를 고칠 수 있었다.
시도 1 : scrollToPosition 사용하기
//최상단으로 스크롤
private fun scrollTop() = with(binding) {
rvArena.smoothScrollToPosition(0)
}
리사이클러뷰에 자동으로 최상단으로 스크롤을 해주는 smoothScrollToPosition을 사용중 이였다.
- 스무스 스크롤이 동작이느리기 때문에 중간부터 아이템이 보인다고 생각하여 scrollToPosition 로 수정했다.
- scrollToPosition: 제일0번째 화면이 보이긴 하지만, 부드럽게 이동하지 않고 바로 화면을 보여주는방식이라 끊겨보이게 동작함.
- 검색이 끝난 후 0번째로 보여질 수 있도록 함수 위치를 수정해보았지만 똑같은 오류가 발행했다.
시도 2 : 검색을 한 후 스크롤 되도록 하기
btnSoccer.setOnClickListener {
searchArena("축구장")
scrollTop()
binding.btnFutsal.isChecked = false
binding.btnSoccer.isChecked = true
binding.btnBowling.isChecked = false
binding.btnBasketball.isChecked = false
binding.btnBadminton.isChecked = false
}
- 검색이다 되지 않았는데 스크롤을해 발생하는 문제인가 하여
- 검색동작을 완료한 후 scroll을 할수 있도록 위치를 변경해주었지만 역시나 같은문제가 발생했다!
시도 3 : 리사이클러뷰 딜레이 주기
private fun scrollTop() = with(binding) {
//약간 딜레이를 주는것
rvArena.post {
rvArena.scrollToPosition(0)
}// 최상단으로 스크롤
}
- 리사이클러뷰 동작이 너무 빨라 생성되기전 스크롤을 하기때문에 발생하는 문제인가 하여
post{}
함수를 사용해 리사이클러뷰가 조금의 딜레이를 가지고 최상단으로 이동할 수 있도록 해주었다.
하지만 역시나 문제가 발생했다.
시도 4 : 해결방법!
list.observe(this@ArenaActivity, Observer {
if (it.isEmpty()) {
binding.tvEmpty.visibility = (View.VISIBLE)
listAdapter.submitList(it)
} else {
binding.tvEmpty.visibility = (View.INVISIBLE)
listAdapter.submitList(it){
//{}아이템을 다 그리고 난후 콜백! 실행
//리스트가 모든걸 생성후 최상단으로 스크롤
scrollTop()
}
}
})
내가 구현한 리사이 클럽뷰 동작은 알맞은 검색어에 맞춰 아이템을 뿌려주는 방식이 였기때문에
listAdapter가 아이템을 다 그리고 난 후 콜백 할 수 있도록
{}
를 사용해서 순서를 지정해주었다.
트러블 슈팅의 문제점
- 리사이클러뷰의 아이템 생성 순서와 스크롤 동작에 대한 이해 부족
- smoothScrollToPosition은 아이템 생성이 완료된 후 스크롤을 하기 때문에, 아이템이 중간 부분부터 보이는 문제가 발생
- 검색을 한 후 스크롤을 하도록 하는 것도, 아이템 생성이 완료된 후 스크롤을 하기 때문에 같은 문제가 발생
- 리사이클러뷰에 아이템을 뿌릴 때는, 아이템 생성이 완료된 후 스크롤을 해야 한다는 점을 이해하지 못했던 것
- submitList의 활용에 대한 이해 부족
- submitList는 아이템 생성이 완료되면 콜백을 제공함
- 이 콜백을 활용하면, 아이템 생성이 완료된 후 스크롤을 할 수 있음
- submitList의 활용에 대한 이해 부족으로 인해, 콜백을 활용하지 못해 문제를 해결하지 못했던 것
느낀점
- 리사이클러뷰의 아이템 생성 순서와 스크롤 동작에 대한 이해가 중요하다.
- 리사이클러뷰에 아이템을 뿌릴 때는, 아이템 생성이 완료된 후 스크롤을 해야 한다는 점을 이해해야 한다.
- submitList의 활용은 아이템 생성 후의 콜백을 잘 이해하고 활용해야 한다.
- submitList는 아이템 생성이 완료되면 콜백을 제공하므로, 이 콜백을 활용하면 아이템 생성이 완료된 후 스크롤을 할 수 있다.
- 효과적인 트러블 슈팅은 문제의 원인을 파악하고 순차적으로 해결책을 시도하는 것이 중요하다.
- 문제의 원인을 파악하지 않고 무작정 해결책을 시도하면, 오히려 문제를 악화시킬 수 있다.