AndroidのViewModel(LiveData)でハマった
最近ViewModelを使い始めて(今までapplicationで保持か値渡しをしてた)でめっちゃくちゃハマって作業が進まない事が合ったのでメモ代わりに投稿してみました。
*こんなの当たり前だよ。馬鹿だなぁって思うかもしれないけど、暖かい目でみてくれると嬉しいです
何をしててハマったか
ViewModel(LiveData)を利用してFragmentAで作業Aを行いFragmentBで作業Aの結果を受け取り画面(View)を更新するようにしようとしていた。
しかし、初回にFragmentBに遷移したときは想定通りの動きをするが二回目以降FragmentBに遷移すると上手くViewが更新されない
原因は
デバックで動きを確認してみるとどうやらLiveData.observe(LifecycleOwner,Observer)が意図しない動きをしていたようだった。
具体的にはFragmentBに二回目以降遷移するとLifecycleOwnerが破棄されていないようでOnCreateが走る前に
observeが呼ばれていたのが原因のようだった。
解決方法
色々と調べているとgetViewLifecycleOwner()を使ってLifecycleOwnerを指定するとViewが破棄されると一緒に破棄されるみたいなので使ってみた。(少なくともFragmentで使うときは)
その結果onCreateが走る前にobserveが呼ばれる事がなくなりViewの更新処理も上手く動いた