From 2790bea1d811556ade82dc526b8063cfb2ff5afa Mon Sep 17 00:00:00 2001 From: klaus Date: Thu, 14 Aug 2025 22:36:50 +0900 Subject: [PATCH] =?UTF-8?q?fix(chat-room):=20stable=20IDs=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=8B=9C=EC=A0=90=EC=9D=84=20setAdapter=20?= =?UTF-8?q?=EC=9D=B4=EC=A0=84=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ChatMessageAdapter: onAttachedToRecyclerView에서 setHasStableIds 호출 제거 - ChatRoomActivity: 어댑터 생성 직후 setHasStableIds(true) 설정 후 RecyclerView에 연결 원인: 옵저버 등록 이후 setHasStableIds 변경으로 런타임 예외 발생 검증: 단위 테스트 모두 통과, 빌드 성공 --- .../co/vividnext/sodalive/chat/talk/room/ChatMessageAdapter.kt | 3 +-- .../co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatMessageAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatMessageAdapter.kt index 9706e116..54ac8c52 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatMessageAdapter.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatMessageAdapter.kt @@ -485,8 +485,7 @@ class ChatMessageAdapter : RecyclerView.Adapter() { override fun onAttachedToRecyclerView(recyclerView: RecyclerView) { super.onAttachedToRecyclerView(recyclerView) - // RecyclerView와 연결된 시점에 안정 ID 활성화 (JVM 테스트에서 NPE 회피) - setHasStableIds(true) + // 안정 ID는 어댑터 생성 시(init) 고정됨. 여기서는 연결 상태 플래그만 설정. isRecyclerViewAttached = true } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt index 8ed0ef70..818eed33 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt @@ -123,6 +123,8 @@ class ChatRoomActivity : BaseActivity( binding.rvMessages.layoutManager = layoutManager chatAdapter = ChatMessageAdapter().apply { + // RecyclerView에 연결하기 전에 안정 ID를 활성화해야 함 + setHasStableIds(true) setCallback(object : ChatMessageAdapter.Callback { override fun onRetrySend(localId: String) { onRetrySendClicked(localId)