fix(chat-room): stable IDs 설정 시점을 setAdapter 이전으로 이동
- ChatMessageAdapter: onAttachedToRecyclerView에서 setHasStableIds 호출 제거 - ChatRoomActivity: 어댑터 생성 직후 setHasStableIds(true) 설정 후 RecyclerView에 연결 원인: 옵저버 등록 이후 setHasStableIds 변경으로 런타임 예외 발생 검증: 단위 테스트 모두 통과, 빌드 성공
This commit is contained in:
		@@ -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
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user