11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LiveDataメモ

Last updated at Posted at 2018-04-24

ライフサイクルを加味してくれて、データバインディングできるLiveDataについてメモ書き。

参考文献

LiveDataとは

observableなデータホルダー。ライフサイクルを加味してよしなに、observerへデータ送信したり、該当のactivityなどがdestroyされたときは、observerを自動でremoveしてくれる。

LiveDataの利点

  • データの状態をうけとり、UIに自動で反映できる
  • メモリリークしない
  • アクティビティがBackStaskにあるときには、データ通知されない
  • 自分で、ライフサイクル管理しなくていい
  • BackStackからアクティブになった瞬間、最新のデータを受け取れる
  • 画面回転などで、アクティビティを作り直した時も、最新のデータを受け取れる
  • シングルトンでラップすれば、いろんな場所からLiveDataを購読できる

LiveDataの使い方

  1. LiveDataインスタンスを作成する。(通常、ViewModel内で行われる)
  2. LiveDataの変更をうけとるonChanged()メソッドをもったObserverをつくる(通常、ActivityやFragmentにて)
  3. observe()メソッドで、ObserverとLiveDataを紐付ける。このとき、LifecycleOwnerを紐付けることで、ライフサイクル管理をよしなにできる。
  4. LiveDataインスタンスの値変更は、メインスレッド上ならsetValue()、バックグラウンドならpostValue()を使う

kotlin実装イメージ

ViewModel

val nameLiveData: MutableLiveData<String> = MutableLiveData()
    
fun onButtonClicked() {
     nameLiveData.value = "hello world"
}

Activity

nameLiveData.observe(this, Observer {
     binding.name.text = it
})

メモ

  • ObserverのonChanged()メソッドは、setValueした都度、データに変更があろうとなかろうと呼ばれる
  • DataBindingでLiveDataを購読したときは、元のデータとsetValueされたデータに違いがないと、呼ばれないぽい
11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?