CodeLab

Android

Codelab으로 Room 알아보기 - 1. Download and inspect the starter app

이번에는 드디어 Room Database에 대해 알아보러 간다. 완전 처음 보는 코드들이 나를 기다리고 있으리라 믿는다. (자랑은 아닌 듯하다) 시작하겠다. 1. Download and run the starter app 먼저 Github에서 앱을 다운로드 받는다. https://github.com/google-developer-training/android-kotlin-fundamentals-starter-apps/tree/master/TrackMySleepQuality-Starter GitHub - google-developer-training/android-kotlin-fundamentals-starter-apps: android-kotlin-fundamentals-starter-apps andro..

Android

Codelab으로 LiveData transform해보기 - 3. 정리(完)

Transforming LiveData LiveData에 transformation을 하고 싶다면 Transformations 클래스의 helper 메소드들을 사용한다. Transformations.map 메소드는 LiveData에 데이터를 변경하고 다른 LiveData 객체를 리턴해준다. Displaying the result of a transformation in a TextView 원본 데이터가 ViewModel의 LiveData로 정의되어 있는지 확인한다. 변수를 정의한다. 어떤 변수가 있다면 Transformations.map 메소드로 transformation을 수행하고 그 값을 변수에 리턴해준다. val newResult = Transformations.map(someLiveData) { ..

Android

Codelab으로 LiveData transform해보기 - 2. Add transformation for the LiveData

Transformations.map 메소드는 원본 LiveData의 데이터를 수정하고 결과 LiveData 객체를 리턴하는 방법을 제공한다. 이 transformations은 리턴된 옵저버가 LiveData 객체를 observe하고 있지 않으면 계산되지 않는다. - 주의사항 : Transformations.map 메소드에서 실행되는 람다식은 메인 스레드에서 실행되기 때문에 오래 실행되는 task를 포함하면 안된다. 이번에는 경과 시간의 LiveData 객체를 "MM:SS" 형식의 새 문자열 LiveData 객체 형태로 만든다. game_fragment.xml 레이아웃 파일은 이미 타이머 텍스트뷰를 가지고 있다. 지금까지 텍스트뷰에 보여줄 텍스트가 없었으므로 타이머 텍스트가 보이지 않았다. 1. GameV..

Android

Codelab으로 LiveData transform해보기 - 1. Add a Timer

이번에는 이전에 수정한 GuessTheWord 앱에 카운트다운을 위한 타이머를 추가한다. 단어 리스트가 비어있으면 게임이 끝나는 대신 타이머가 끝날 때 게임이 끝나도록 할 것이다. 이 때 사용될 유틸리티 클래스를 안드로이드에서는 제공하는데 CountDownTimer가 있다. 기기 설정 변경 도중 타이머가 destroy되지 않도록 ViewModel에 해당 로직을 추가한다. 프래그먼트는 타이머가 작동할 때마다 텍스트뷰를 업데이트하는 코드를 포함하고 있다. GameViewModel 클래스에 아래 과정을 따라 구현한다. 1. 타이머 상수를 갖고 있기 위해 companion object를 만든다. companion object { // Time when the game is over private const va..

Android

Codelab으로 DataBinding 알아보기 - 4. 정리(完)

데이터 바인딩 라이브러리는 LiveData나 ViewModel같은 AAC와 아주 매끄럽게 동작한다. ViewModel data binding 데이터 바인딩을 사용해 ViewModel과 레이아웃을 연결할 수 있다. ViewModel 객체는 UI 데이터를 가지고 있다. ViewModel 객체를 데이터 바인딩에 전달함으로써 뷰와 ViewModel 객체 사이의 통신을 일부 자동화할 수 있다. 아래는 ViewModel과 레이아웃을 연결하는 방법이다. 레이아웃 파일에 ViewModel 타입의 데이터 바인딩 변수를 추가한다. Fragment 파일안에 ViewModel을 데이터 바인딩에 전달한다. binding.gameViewModel = viewModel Listener bindings 리스너 바인딩은 레이아웃에서 ..

Android

Codelab으로 LiveData 알아보기 - 7. Add the Play Again Button

이번에는 점수 화면에 Play Again 버튼을 추가하고 LiveData를 사용하여 클릭 리스너를 구현할 것이다. 해당 버튼은 점수 화면에서 다시 게임 화면으로 이동하는 이벤트를 발생시킨다. 먼저, 우리가 받아놓은 코드에는 이미 Play Again 버튼이 있지만 숨겨져 있다. 1. score_fragment.xml에서 play_again_button의 visibility를 보이도록 처리한다. 2. ScoreViewModel에 _eventPlayAgain이라는 Boolean값을 가지는 LiveData객체를 추가한다. 이 객체는 점수 화면에서 게임 화면으로 이동하는 이벤트를 저장하기 위해 만들었다. private val _eventPlayAgain = MutableLiveData() val eventPlay..

Android

Codelab으로 LiveData 알아보기 - 6. Add LiveData to the ScoreViewModel

이번에는 score를 ScoreViewModel의 LiveData 객체로 변경하고 옵저버를 붙일 것이다. 이번 작업은 4번의 LiveData를 GameViewModel에 추가한 작업과 비슷할 것이다. 앱의 모든 데이터가 LiveData를 사용하도록 하기 위해 ScoreViewModel에 이러한 변경점을 적용한다. 1. ScoreViewModel의 score 변수를 MutableLiveData로 변경한다. _score 변수를 네이밍 컨벤션을 지켜 이름을 변경하고 backing property를 추가한다. private val _score = MutableLiveData() val score: LiveData get() = _score 2. GameViewModel의 초기화 블럭 안에서 _score를 초기화..

Android

Codelab으로 LiveData 알아보기 - 5. Add a game-finished event(2)

저번 글에서 문제는 토스트 메시지가 프래그먼트가 기기 회전 등의 이유로 재생성될 때마다 다시 보이는 것이었다. 바로 본론으로 들어가보자. Reset the game-finished event 보통, LiveData는 데이터 변경이 있을 때만 업데이트를 옵저버에게 전달한다. 이 행동의 예외 사항은 옵저버가 비활성 상태에서 활성 상태로 변경될 때도 업데이트를 수신한다는 것이다. 이것이 게임 종료에 대한 토스트가 반복적으로 발생하는 이유이다. 화면 회전 이후 GameFragment가 재생성되면 비활성에서 활성 상태로 변경되고, 옵저버는 기존 ViewModel에 다시 연결된다. 그리고, 데이터를 수신한다. 그럼 gameFinished 메소드가 다시 호출되고, 토스트가 표시된다. GameViewModel안의 ev..

Android

Codelab으로 LiveData 알아보기 - 1. Add LiveData to the GameViewModel

첫 번째로 ViewModel에 LiveData를 적용해 볼 것이다. LiveData는 생명 주기를 인지하는 관찰 가능한 데이터 홀더 클래스이다. 예를 들어, 우리는 이 앱에서 현재 점수를 LiveData로 감쌀 수 있다. 이번 코드랩에서는 LiveData의 여러 특성을 배울 것이다. - LiveData는 관찰 가능하다. 이 뜻은 LiveData 객체가 가지고 있는 데이터가 변경될 때 observer에게 감지된다는 의미이다. - LiveData는 데이터를 가지고 있다. LiveData는 wrapper이고 모든 데이터와 같이 사용될 수 있다. - LiveData는 생명 주기를 인식한다. LiveData에 observer를 붙일 때, observer는 LifecycleOwner와 연계되어 있다. (Lifecy..

Android

Codelab으로 LiveData 알아보기 - 과정 소개

이번 코드랩에서는 ViewModel 클래스의 데이터와 LiveData를 어떻게 통합하는지 배우게 될 것이다. LiveData는 데이터베이스 변경이 있을 때 알려주는 데이터 객체를 빌드하도록 해주는 AAC 중 하나이다. LiveData 클래스를 사용하기 위해서는 앱의 데이터 변경을 관찰하는 observer를 설정해야 한다. LiveData는 lifecycle을 인식한다. 그래서 active lifecycle 상태에 있는 앱 구성 요소 observer만 업데이트한다. LiveData에 관한 코드랩을 시작하기 앞서 만약 ViewModel의 사용법을 모른다면 먼저 공부해야 한다. https://bonustrack02.tistory.com/entry/Codelab%EC%9C%BC%EB%A1%9C-ViewModel..

BonusTrack02.dev
'CodeLab' 태그의 글 목록