728x90
반응형

2025/03/04 7

기기 회전과 상태 유지

화면 회전 시 상태 손실기기에서 앱을 실행하고 회전하면 온보딩 화면이 다시 표시된다remember 함수는 컴포저블이 컴포지션에 유지되는 동안에만 작동한다기기를 회전하면 전체 활동이 다시 시작되므로 모든 상태가 손실된다이 현상은 구성이 변경되거나 프로세스가 중단될 때도 발생한다 해결 방법remember를 사용하는 대신 rememberSaveable을 사용rememberSaveable  함수는 구성 변경과 프로세스 중단에도 각 상태를 저장한다 import androidx.compose.runtime.saveable.rememberSaveable ... var shouldShowOnboarding by rememberSaveable { mutableStateOf(true) }

LazyColumn, LazyRow의 특징 및 사용

LazyColumn, LazyRow 특징스크롤 가능한 리스트내부적으로 Cloumn, Row과 비슷, 스크롤 기능이 내장됨별도의 ScrollView 없이 리스트 생성 가능지연(Lazy) 로딩 최적화화면에 보이는 항목만 렌더링 하며, 보이지 않는 항목은 자동으로 제거: 메모리 절약많은 데이터가 있어도 성능 저하 없이 부드러운 스크롤 제공성능 최적화 (RecyclerView 대체)기존 RecyclerView와 달리 어댑터, ViewHolder 설정이 필요 없음item()을 사용하여 리스트를 쉽게 구성Composable UI 요소 배치 가능내부에 item()을 사용하여 다양한 UI 요소를 추가할 수 있음예시import androidx.compose.foundation.lazy.LazyColumnimport an..

상태 호이스팅

여러 @Compose 함수에서 읽거나 수정하는 상태를 공통 상위 컴포저블로 이동 시키는 것 호이스팅 장점상태 중복을 방지하고 버그를 줄임컴포저블을 더 쉽게 재사용 가능테스트 용이주의점: 상위 요소에서 제어할 필요가 없는 상태는 호이스팅 불필요  잘못된 예시...@Composablefun OnboardingScreen(modifier: Modifier = Modifier) { // 잘못된 상태 저장 예시 var shouldShowOnboarding by remember { mutableStateOf(true) } Column( modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, ..

Compose에서의 상태

열과 행 만들기Compose 세 가지 기본 표준 레이아웃 요소ColumnRowBox 이런 요소는 내부에 항목을 배치할 수 있다예를 들어 Column 내부의 각 하위 요소는 세로로 배치된다@Composablefun MyApp(modifier: Modifier = Modifier) { Surfajoyshu93.tistory.com상호작용을 추가를 위해 앞서 진행한 내용을 토대로 진행하려고 한다 Button의 상태를 저장 및 추적하기 위해 코드를 수정expanded라는 값을 Compose에서 추적하기 위해서는 mutableStateOf 함수를 사용해야 한다그리고 그 상태를 기억하기 위해서는 remember를 사용해야 한다@Composablefun Greeting(name: String, modifier: Mo..

열과 행 만들기

Compose 세 가지 기본 표준 레이아웃 요소ColumnRowBox 이런 요소는 내부에 항목을 배치할 수 있다예를 들어 Column 내부의 각 하위 요소는 세로로 배치된다@Composablefun MyApp(modifier: Modifier = Modifier) { Surface( modifier = modifier, color = MaterialTheme.colorScheme.background ) { Column() { // Column 사용 Greeting("Hello") Greeting("Android") } }}@Composablefun Greeting(str: String, modifie..

간단한 버튼 동작 구현해보기

버튼 클릭마다 증가된 Count값이 Text로 표시되도록 구현하려고 한다 Greeting() 수정 (디자인)Column 추가Text 추가Button 추가@Composablefun Greeting(clickCnt: Int, onClicked:()->Unit) { Column(){ Text(text = "클릭된 카운트 : $clickCnt") //Text 할당 Button(onClick = onClicked) { //onClicked 값 전달 Text(text = "클릭해주세요") } }} 동작 추가clickCnt 변수 추가 및 전달onClicked 내용 추가class MainActivity : ComponentActivity() ..

안드로이드 Compose와 기존 방식(XML + View) 비교

UI 구성 방식기존 방식 (XML + View)UI를 XML 파일로 정의하고, Java/Kotlin 코드에서 findViewById()로 참조하여 수정함View는 상태를 직접 변경해야 하며, 변경된 내용을 적용하려면 명시적으로 업데이트해야 함Jetpack Compose코틀린 코드로 UI를 선언형 방식으로 작성함@Composable 함수를 사용하여 UI를 구성하며, 상태 변화에 따라 자동으로 UI가 업데이트됨 (즉, findViewById()가 필요 없음)UI 업데이트 방식기존 방식UI가 변경될 때 View를 찾고 값을 변경textView.text = "Hello"Compose 방식상태 변화를 감지하여 UI를 자동으로 재구성remember와 mutableStateOf를 사용하여 상태 변화를 감지할 수 있음..

728x90
반응형