Androidアーキテクチャコンポーネントの安定化に伴い、すべての基本ViewModel
をViewModel
の新しい実装に更新し始めました。私の理解では、LiveData
の使用は、ライフサイクルをより良く扱うので、Model
クラスを保持することをお勧めします。データバインディングでLiveDataを使用する
私はData Binding
を使いたいのですが、それはJava/Kotlin側でコードがより明確になり、UIを更新するために値の変更を「監視」する必要がないためです。しかし、Data Binding
を使用するレイアウトは、Model
(またはViewModel)がBaseObservable
およびLiveData
に拡張されている場合にのみ、データの変更を監視します。私はLiveData
の主な目的の1つが観察され、UIをプログラム的に更新することを理解していますが、簡単な更新のためにはData Binding
が非常に便利です。
この問題は既に報告されており(GitHubおよびStack Overflow)、最初にバージョン1.0にはこれがあり、この機能が開発中であると言われました。
LiveData
とData Binding
の両方を使用するためには、私はBaseObservable
を拡張するクラスの非常に単純な実装を作成しました:
import android.arch.lifecycle.LiveData
import android.arch.lifecycle.MutableLiveData
import android.databinding.BaseObservable
class ObservableMutableLiveData<T>() : BaseObservable() {
private var data: MutableLiveData<T> = MutableLiveData()
constructor(data: T) : this() {
this.data.value = data
}
public fun set(value: T) {
if (value != data.value) {
data.value = value
notifyChange()
}
}
public fun get(): T? {
return data.value
}
public fun getObservable(): LiveData<T> {
return data
}
}
そこで、基本的に私ObservableMutableLiveData
がモデルを保存するためにLiveData
を使用してObservableField
のコピーであり、これには、実装は、すべてのモデル更新後にレイアウトを更新します。
質問は以下のとおりです。これはLiveData
の悪い実装
- ですか?このラッパーは、ライフサイクルを意識するなど、
LiveData
の機能を「中断しますか? - 私の理解では、
LiveData
は新しいObservableField
です。これは正しいです?LiveData
がobservable field
として用いることができるので(現在はカナリー6中)のAndroidメーカー3.1は、この問題を解決します