2021. 10. 26. 17:32ㆍKotlin/Android
# LiveData 초기화하기
LiveData 초기화하는 방법은 2가지가 있다.
하지만 LiveData는 비동기 데이터 스트림을 처리하도록 설계되지 않았다. 즉 데이터 스트림을 결합하는 기능이 매우 제한적이다.
- LiveData로 변환
- MediatorLiveData를 사용
추천하는 방식은
Kotlin Flow를 사용한 후, asLiveData() 메서드를 통해 LiveData로 변환하는 방식이다.
Java로 빌드된 코드인 경우, CallBack이나 RxJava와 함께 Executor를 사용하는 것을 추천한다.
# ViewModel에서 LiveData 사용하는 방법
LiveData는 List와 같은 데이터의 wrapper에 해당한다.
일반적으로 ViewModel에서는 다음과 같은 형태로 사용한다.
class NameViewModel : ViewModel() {
// LiveData 생성하기
val currentName: MutableLiveData<String> by lazy {
MutableLiveData<String>() // load 데이터
}
}
# LiveData와 Observer 연결하기
앱 컴포넌트의 onCreate() 메서드가 observe()를 선언하기에 가장 적합하다. 그 이유는 다음과 같다.
- System이 Activity나 Fragment의 onResume() 메서드를 중복 호출하지 않도록 하기 위해서.
- Activity나 Fragment가 Active한 상태(STARTED)가 되는 즉시, 데이터의 최신 값을 포함하기 위해서.
단, 이는 LiveData가 설정된 경우에 가능하다.
class NameActivity : AppCompatActivity() {
// Use the 'by viewModels()' Kotlin property delegate
// from the activity-ktx artifact
// = 'by viewModels()'를 사용하려면 activity-ktx를 포함시키세요.
private val model: NameViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// this activity setup ...
// Observer 생성하기
val nameObserver = Observer<String> { newName ->
// UI 업데이트 작업 ...
nameTextView.text = newName
}
// LiveData를 Observe하기
// LifecycleOwner로서 this Activity와, 위의 Observer 이용
model.currentName.observe(this, nameObserver)
}
}
# LiveData 업데이트하기
LiveData는 저장된 data를 업데이트하는데 제공되는 메서드가 없다.
MutableLiveData는 setValue(T)나 postValue(T)를 제공한다.
기본 thread에서 LiveData를 업데이트하는 경우에는, setValue(T)
worker thread에서 업데이트하는 경우에는, postValue(T)를 사용하면 된다.
button.setOnClickListener {
val anotherName = "John Doe"
// setValue()로 LiveData 업데이트하기
model.currentName.setValue(anotherName)
}
'Kotlin > Android' 카테고리의 다른 글
OkHttp 와 Retrofit 차이 (0) | 2021.11.06 |
---|---|
Android Studio에서 SHA-1키 얻는 방법 (0) | 2021.10.31 |
MediatorLiveData로 LiveData 병합하기 (0) | 2021.10.27 |
LiveData 변환하기 (0) | 2021.10.27 |
LiveData 란? (0) | 2021.10.26 |