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

2023. 5. 20. 18:30·Dev experience/Android
728x90
반응형

Transformations.map 메소드는 원본 LiveData의 데이터를 수정하고 결과 LiveData 객체를 리턴하는 방법을 제공한다.

이 transformations은 리턴된 옵저버가 LiveData 객체를 observe하고 있지 않으면 계산되지 않는다.

 

- 주의사항 : Transformations.map 메소드에서 실행되는 람다식은 메인 스레드에서 실행되기 때문에
오래 실행되는 task를 포함하면 안된다.

 

이번에는 경과 시간의 LiveData 객체를 "MM:SS" 형식의 새 문자열 LiveData 객체 형태로 만든다.

 

game_fragment.xml 레이아웃 파일은 이미 타이머 텍스트뷰를 가지고 있다.

지금까지 텍스트뷰에 보여줄 텍스트가 없었으므로 타이머 텍스트가 보이지 않았다.

 

1. GameViewModel에서 currentTime을 초기화한 뒤, currentTimeString이라는 LiveData 객체를 만든다.

이 객체는 currentTime의 형식화된 문자열 객체이다.

 

2. Transformations.map 메소드를 사용해 currentTimeString을 정의한다. 람다함수에 currentTime을 넘겨준다.

DateUtils.formatElapsedTime 유틸리티 메소드를 사용해 람다함수로 구현할 수 있다.

이 메소드는 초 단위 시간을 long 타입으로 가지고 문자열을 "MM:SS" 형식으로 지정한다.

// The String version of the current time
val currentTimeString = Transformations.map(currentTime) { time ->
   DateUtils.formatElapsedTime(time)
}

 

3. xml의 타이머 텍스트뷰에 text 속성을 gameViewModel의 currentTimeString으로 바인드한다.

 

<TextView
   android:id="@+id/timer_text"
   ...
   android:text="@{gameViewModel.currentTimeString}"
   ... />

 

이제 앱을 실행하면 타이머 텍스트가 1초마다 업데이트되고, 이제 게임은 타이머가 종료될 때 종료된다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Dev experience > Android' 카테고리의 다른 글

Android Notification channel 설정이 적용안되는 경우  (0) 2023.06.09
Codelab으로 LiveData transform해보기 - 3. 정리(完)  (0) 2023.05.23
Codelab으로 LiveData transform해보기 - 1. Add a Timer  (0) 2023.05.19
Codelab으로 DataBinding 알아보기 - 4. 정리(完)  (1) 2023.05.17
Codelab으로 DataBinding 알아보기 - 3. Add LiveData to data binding  (0) 2023.05.14
'Dev experience/Android' 카테고리의 다른 글
  • Android Notification channel 설정이 적용안되는 경우
  • Codelab으로 LiveData transform해보기 - 3. 정리(完)
  • Codelab으로 LiveData transform해보기 - 1. Add a Timer
  • Codelab으로 DataBinding 알아보기 - 4. 정리(完)
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (237)
      • Dev experience (85)
        • Android (84)
        • Kotlin (1)
      • Study (62)
        • Kotlin (26)
        • Swift (17)
        • Java (19)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 전시회 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    스위프트
    PCCE
    programmers
    daterangepicker
    coroutines
    viewModelScope
    코틀린
    jetpack
    LiveData
    room
    프로그래머스
    databinding
    aac
    배열
    ios
    Java
    Material
    안드로이드
    ViewModel
    코루틴
    MVVM
    getNumericValue
    CodeLab
    Observer
    android
    자바
    Kotlin
    SWIFT
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
Codelab으로 LiveData transform해보기 - 2. Add transformation for the LiveData
상단으로

티스토리툴바