Add navigation
Record the sleep quality
coroutine 패턴 사용
- viewModelScope에서 coroutine launch
- sleepNightKey를 사용해 tonight 얻기
- sleep quality 설정
- database 업데이트
- navigation 실행(trigger)
Control button visibility and add a snackbar
transformation maps
Step 1: 버튼 상태 업데이트하기
fragment_sleep_tracker.xml
<Button
android:id="@+id/start_button"
...
android:enabled="@{sleepTrackerViewModel.startButtonVisible}"
...
<Button
android:id="@+id/stop_button"
...
android:enabled="@{sleepTrackerViewModel.stopButtonVisible}"
...
<Button
android:id="@+id/clear_button"
...
android:enabled="@{sleepTrackerViewModel.clearButtonVisible}"
SleepTrackerViewModel.kt
val startButtonVisible = Transformations.map(tonight) {
it == null
}
val stopButtonVisible = Transformations.map(tonight) {
it != null
}
val clearButtonVisible = Transformations.map(nights) {
it?.isNotEmpty()
}
Tip: disabled View의 appearance 설정
enabled 속성은 View의 비활성화 여부를 결정하지 View의 가시성 여부를 결정하지 않는다.
View가 활성화되지 않은 것을 시각적으로 나타내기 위해 기본 스타일이 비활성화된 View에 적용된다.
그러나 View가 background 속성이나 textColor 속성을 가지면 그 속성의 값은 View가 비활성화되더라도 화면에 뜰 때 사용된다.
활성화/비활성화 상태일 때 무슨 색깔을 사용할지 정하려면 글자 색깔에 대해 ColorStatementList, 배경 색깔에 대해 StateListDrawable을 사용한다.
Step 2: 사용자에게 알림을 띄우는 snackbar 사용하기
SleepTrackerViewModel.kt
private var _showSnackbarEvent = MutableLiveData<Boolean>()
val showSnackBarEvent: LiveData<Boolean>
get() = _showSnackbarEvent
...
private var _showSnackbarEvent = MutableLiveData<Boolean>()
val showSnackBarEvent: LiveData<Boolean>
get() = _showSnackbarEvent
SleepTrackerFragment.kt
sleepTrackerViewModel.showSnackBarEvent.observe(viewLifecycleOwner, Observer {
if (it == true) { // Observed state is true.
Snackbar.make(
requireActivity().findViewById(android.R.id.content),
getString(R.string.cleared_message),
Snackbar.LENGTH_SHORT // How long to display the message.
).show()
sleepTrackerViewModel.doneShowingSnackbar()
}
})
SleepTrackerViewModel.kt
...
fun onClear() {
viewModelScope.launch {
clear()
tonight.value = null
_showSnackbarEvent.value = true
}
}
...
Homework
Answer these questions
Q1. 1, 3 / Q2. 1, 2
'안드로이드 Android > Android Study Jams' 카테고리의 다른 글
8. Connect to the internet - Get data from the internet (0) | 2021.01.28 |
---|---|
7. Databases and RecyclerView - RecyclerView Fundamentals (0) | 2021.01.21 |
7. Databases and RecyclerView - Use coroutines with Room (0) | 2021.01.20 |
7. Databases and RecyclerView - Create a Room database (0) | 2021.01.18 |
6. Architecture components - LiveData transformations (0) | 2021.01.08 |