[Compose] XML ComposeView에서 SetContent 이후 재호출 시, 다시 컴포저블 갱신 안되는 문제

2025. 4. 17. 17:10· Development/Android
반응형

- 기존의 XML 화면에서 Compose 기반 컴포넌트 활용을 위해 ComposeView를 사용하고 있었다.

<androidx.compose.ui.platform.ComposeView
    android:id="@+id/mainAddBtn"
    android:layout_width="52dp"
    android:layout_height="52dp"
    android:layout_gravity="right|bottom" />

 

- 그리고 인앱 지정 컬러를 변경할 때마다 ComposeView에 걸린 컴포저블의 tint도 변경을 해줘야 했는데, 프로퍼티로 들어가는 속성 값은 변경되지만 실제 컴포저블 set 로직까지는 진입이 안 되는 것을 확인했다.

mainAddBtn.setContent {
    TbFloatingActionButton(
        androidx.compose.ui.graphics.Color(AppColor()),
        ...

 

- 이유는 setContent {} 자체가 최초 한 번만 컴포지션을 설정하도록 구성되어 있는 것이다. 따라서 이미 컴포지션이 설정된 ComposeView에 대해서는 발동하지 않는다.

 

- 내부를 들어가면 아래와 같은 함수가 구성되어 있다.

private fun ensureCompositionCreated() {
    if (composition == null) {
        try {
            creatingComposition = true
            composition = setContent(resolveParentCompositionContext()) {
                Content()
            }
        } finally {
            creatingComposition = false
        }
    }
}

 

- 그래서 이를 위해 제대로 갱신하려면 기존의 컴포지션을 해제하는 disposeComposition()을 먼저 호출하도록 구성하면 된다.

mainAddBtn.disposeComposition()
mainAddBtn.setContent {
    TbFloatingActionButton(
    ...

 

- 사실 이렇게 변경이 필요한 경우에는 전체적으로 Compose Migration 진행한 후, 리컴포지션을 활용하는 것이 좋다.

 

- 당장 마이그레이션이 어려운 상황이라 임시 방편으로 처리..

반응형
저작자표시 (새창열림)
'Development/Android' 카테고리의 다른 글
  • [Compose] 컴포넌트 클릭 시, Ripple + Scale Animation 적용
  • [Room DB] 기존 테이블에 필드 추가 마이그레이션
  • [Compose] 컴포넌트 클릭 상태를 감지하여 Text 변화주기
  • [Android] 구글 인앱 결제 가격이 Free로 표시되어 앱 심사에서 거절 당한 이야기...;
SeungYong.Lee
SeungYong.Lee
반응형
SeungYong.Lee
Win-Dev
SeungYong.Lee
전체
오늘
어제
  • All (221)
    • Development (122)
      • Android (118)
      • iOS (0)
      • Flutter (4)
      • Backend (0)
    • Algorithm (5)
    • Knowledge (4)
      • IT (2)
      • Science (0)
      • ETC & Tip (2)
    • Today I Learn (28)
    • Coding Test (62)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 안녕하세요. 반갑습니다 :)

인기 글

태그

  • Animation
  • 코틀린
  • Imageview
  • dfs
  • Android
  • 프로그래머스
  • DI
  • coroutine
  • Collection
  • HTTP
  • exception
  • 코딩테스트
  • Widget
  • Kotlin
  • 비동기처리
  • Flutter
  • Retrofit
  • compose
  • Java
  • hilt

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
SeungYong.Lee
[Compose] XML ComposeView에서 SetContent 이후 재호출 시, 다시 컴포저블 갱신 안되는 문제
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.