fix(chat-room): stable IDs 설정 시점을 setAdapter 이전으로 이동

- ChatMessageAdapter: onAttachedToRecyclerView에서 setHasStableIds 호출 제거
- ChatRoomActivity: 어댑터 생성 직후 setHasStableIds(true) 설정 후 RecyclerView에 연결

원인: 옵저버 등록 이후 setHasStableIds 변경으로 런타임 예외 발생
검증: 단위 테스트 모두 통과, 빌드 성공
This commit is contained in:
2025-08-14 22:36:50 +09:00
parent 3f87b35816
commit 2790bea1d8
2 changed files with 3 additions and 2 deletions

View File

@@ -485,8 +485,7 @@ class ChatMessageAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) { override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
super.onAttachedToRecyclerView(recyclerView) super.onAttachedToRecyclerView(recyclerView)
// RecyclerView와 연결된 시점에 안정 ID 활성화 (JVM 테스트에서 NPE 회피) // 안정 ID는 어댑터 생성 시(init) 고정됨. 여기서는 연결 상태 플래그만 설정.
setHasStableIds(true)
isRecyclerViewAttached = true isRecyclerViewAttached = true
} }

View File

@@ -123,6 +123,8 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
binding.rvMessages.layoutManager = layoutManager binding.rvMessages.layoutManager = layoutManager
chatAdapter = ChatMessageAdapter().apply { chatAdapter = ChatMessageAdapter().apply {
// RecyclerView에 연결하기 전에 안정 ID를 활성화해야 함
setHasStableIds(true)
setCallback(object : ChatMessageAdapter.Callback { setCallback(object : ChatMessageAdapter.Callback {
override fun onRetrySend(localId: String) { override fun onRetrySend(localId: String) {
onRetrySendClicked(localId) onRetrySendClicked(localId)