일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 안드로이드 컴포즈
- android orbit
- 코루틴
- 안드로이드 커스텀 뷰
- Unsupported metadata version. Check that your Kotlin version is >= 1.0: java.lang.IllegalStateException
- BOJ
- android compose orbit
- Sticky Header RecyclerView
- viewmodel
- Hilt 에러
- 코루틴 공식 문서
- Android Compose
- 백준
- 안드로이드 무한 스크롤
- Kotlin Serialization
- 스레드 vs 코루틴
- RecyclerView Sticky Header
- 코루틴 공식문서
- Thread vs Coroutine
- 코틀린 에러 핸들링
- Android Custom View
- hilt
- 백준 2615
- power menu 라이브러리
- runCatching
- power menu
- Coroutine
- Android Compose Navigation
- AAC ViewModel
- 힐트
- Today
- Total
목록전체 글 (59)
Beeeam

최근에 Jetpack Compose를 사용하여 프로젝트를 진행하고 있다. 근데 Navigation을 사용하여 화면 이동을 구현하는 과정에서 data class로 정의된 객체를 전달 해야하는 상황이 생겼다. 화면 이동하면서 인자를 전달하는 방법에 대해서 찾아봤는데 전부 String 타입으로 전달해야 한다는 내용들이였다.근데 현재 내가 처한 상황은 String 타입이 아닌 커스텀 타입의 객체를 전달하는 것이였다. 이에 대해서도 찾아보니 전달하고자 하는 객체를 직렬화 하고 커스텀 NavType을 사용하라는 답을 발견했다.결론부터 말하면 커스텀 NavType을 사용하는 방법으로 해결하지 못했다… 인자의 타입을 커스텀 NavType으로 설정하면 화면 이동이 안되는 오류가 발생했다…그래서 생각하던 중 String ..

Jetpack Navigation을 통해서 안드로이드 앱에서의 화면 이동을 쉽게 구현할 수 있다. Jetpack Navigation은 스택구조의 내비게이션 스택을 사용하여 사용자의 경로를 추적한다. 사용자가 현재 위치한 화면들은 내비게이션 스택에 쌓였다가 사용자가 뒤로가는 동작을 실행하면 위에서부터 하나씩 빼는 방식이다. 프로젝트에 내비게이션을 추가하려면 먼저 NavHostController 인스턴스를 만들어야 한다. 얘가 내비게이션 스택을 관리하고 현재 위치를 추적한다. val navController = rememberNavController() 이렇게 만든 내비게이션 컨트롤러는 NavHost 인스턴스에 할당해야 한다. NavHost는 사용자가 이동할 화면의 플레이스홀더 역할을 한다. NavHost(..

오늘은 코드랩를 진행하면서 공부하였다. 코드랩은 밑의 링크에서 진행해 볼 수 있다. https://developer.android.com/codelabs/jetpack-compose-basics?hl=ko#1 Jetpack Compose 기초 | Android Developers 이 Codelab에서는 Compose의 기본사항을 알아봅니다. developer.android.com 몇 가지 빼고는 다 앞에서 공부 했던 것들이라서 복습하는 느낌이 많이 들었다. 기본적으로 컴포즈로 프로젝트를 생성하면 다음과 같은 형식의 코드를 볼 수 있다. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) {..

Row/Column 이용하여 레이아웃 구성 @Composable fun TextCell(text: String, modifier: Modifier = Modifier) { val cellModifier = Modifier .padding(4.dp) .size(100.dp, 100.dp) .border(width = 4.dp, color = Color.Black) Text( text = text, cellModifier.then(modifier), fontSize = 70.sp, fontWeight = FontWeight.Bold, textAlign = TextAlign.Center ) } Row, Column을 통한 레이아웃 정렬을 위의 컴포저블을 통해서 확인할 예정이니 먼저 선언해놓는다. Row Row..

컴포저블 함수 컴포즈로 사용자 인터페이스를 만들 때 사용하는 특수한 코틀린 함수이다. @composable 애너테이션을 붙여서 선언한다. 컴포저블 함수에서는 일반 코틀린 함수를 호출할 수 있지만 일반 코틀린 함수에서는 컴포저블 함수를 호출하는 것이 불가능하다. 상태 컴포저블, 비상태 컴포저블 함수로 구분된다. 여기서 상태는 앱 실행 중에 변경될 수 있는 모든 값들을 의미한다. ex) 텍스트 필드에 입력된 문자열, 슬라이더의 위치 값, 체크 박스의 현재 설정 상태 등등… 상태 컴포즈 같은 선언형 언어에서 “상태”는 시간에 따라 변경될 수 있는 값을 의미한다. 우리가 일반적으로 사용하는 표준 변수와 다를게 없다고 생각할 수 있지만 2가지 차이점이 있다. 컴포저블 함수의 상태 변수는 “기억”되어야 한다. 함수..

기존의 xml을 이용하여 레이아웃을 구성하던 방식과 달리 xml을 사용하지 않기 때문에 프로젝트 내에 없다. 대신 레이아웃을 구성하는 코드는 @Composable 애너테이션이 붙은 “컴포저블 함수”로 구현한다. class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { ComposePracticeTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background, ) { DemoText("Android",..
이번 프로젝트에서 피드 부분을 담당하게 되서 RecyclerView를 많이 다뤘다. 덕분에 이전보다 RecyclerView를 사용하는게 익숙해지긴 했지만 아직도 어렵게 느껴진다. 프로젝트의 안드로이드 파트 멘토 형이 했던 말이 생각난다. RecyclerView는 금쪽이다. 이 말에 100% 공감한다. 얘는 잘 구현했다고 생각하여 테스트 해도 이상하게 동작한다. 근데 어느 부분이 문제인지도 찾기 힘들다. 본인이 RecyclerView의 동작 원리 및 기초적인 것들을 잘 모르기 때문이라는 생각도 든다. 그래서 RecyclerView의 기초와 프로젝트를 진행하면서 RecyclerView에 대해서 알게 되었던 부분들을 정리하고자 한다. 왜 사용하는 거임? 먼저 이 친구를 왜 사용하는 지를 알아야 할 것 같다. ..
CountDownTimer 객체를 사용하면 안드로이드 프로젝트에서 타이머를 쉽게 구현할 수 있다. binding.btnTimer.setOnClickListener { val timer = object : CountDownTimer(10000L, 1000L) { override fun onTick(p0: Long) { Log.d("Timer", "1초마다 호출") } override fun onFinish() { Log.d("Timer", "타이머 종료!!") } } timer.start() } 본인은 CountDownTimer 객체를 사용하여 버튼이 클릭되면 1초마다 특정 로그를 찍는 타이머를 만들어봤다. 먼저 CountDownTimer 객체를 만들면서 인자로 실행할 시간, 호출 주기를 전달한다. 이 둘..