같은 로직을 공유하는 화면에서는 종종 동일한 viewmodel 인스턴스를 공유해야 하는 일이 생긴다.compose를 사용하지 않던 기존 viewmodel에서는 ActivityViewModel을 사용하여 Fragment간 Viewmodel을 공유했으나 compose로 바뀌면서 화면단위가 Screen으로 변경되어 방법이 달라졌다. 결론적으로 NavBackStackEntry를 사용한다.NavBackStackEntry는 네비게이션 백스택의 각 항목을 나타내며, 각 항목에 ViewModelStore가 포함되어 있다. 따라서 특정 화면의 viewModel을 가져오고 싶다면 NavBackStackEntry를 사용하여 해당 화면에 viewModel 인스턴스에 접근하면 된다. 방법은 다음과 같다. 먼저 NavHost에서..
Compose로 개발 중 Splash Screen을 사용할 일이 생겼다. 적용을 하기위해 두가지 필요성이 있었는데 다음과 같다.1. 최신 안드로이드 기기에서 사용2. Splash Screen은 데이터 로딩 후 종료되어야함 먼저 스플래쉬 스크린을 사용하기 위해 build.gradle에 추가한다.implementation 'androidx.core:core-splashscreen:1.0.1' 이제 splash screen의 기본적인 설정을 적용해줄 테마를 만든다.해당 테마로 스플래쉬 스크린의 배경, 아이콘등을 설정할 수 있다. 이제 적용을 위해 manifest를 수정하였다. applicaton단과 activity단의 them..
Android Studio로 새로운 프로젝트를 빌드하던 중unknown kotlin jvm target: 20 이란 오류가 발생하였다.오류의 원인은 Gradle과 Kotlin이 아직 해당 버전의 JDK를 지원하지 않기 때문에 발생합니다. 즉, JDK 20은 현재 Gradle 8.1과 Kotlin 1.8.20에 대해 너무 새로운 버전입니다.라고 하는데.. 결국 JDK20이 너무 상위 버전이라 생긴 문제였다.Kotlin 버전 1.9.0-Beta버전에서는 해결 되었다고 하는데 2023년 7월에 정식 릴리즈가 된다하니 현재로서는 해결방안이 될 수 없다. 결론적으로 jvmTarget버전과 compile 버전을 낮추는 것이 해결방법이다.방법은 다음과 같다. build.gradle(Module :app)파일에 들어가..
Kotlin을 이용한 앱개발 중 프로필사진을 설정하기 위한 갤러리 이미지 접근이 필요했다. 12345678910111213141516171819imageResult = registerForActivityResult( //oncreate에서만 정의가능 -> 모듈화 불가능 ActivityResultContracts.StartActivityForResult() ){ result -> if(result.resultCode == RESULT_OK){ // 이미지를 선택하면.. progressOff() //uri형태로 받아온 데이터 저장 val imageUri = ..