class MainViewModel(app:Application) : AndroidViewModel(app) {
private var _screenManager: MyScreenManager? = null
val screenManager: MyScreenManager?
get() = _screenManager
init {
_screenManager = MyScreenManager(getApplication())
}
}
class FragmentA : Fragment() {
private val viewModel: MainViewModel by activityViewModels()
private var sm: MyScreenManager? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sm = viewModel.screenManager
}
override fun onDestroy() {
sm.finish()
sm = null
super.onDestroy()
}
}
MainViewModel のプロパティをFragmentAで参照していて、
FragmentBに移る時にFragmentBでは、viewModel.screenManagerは使っていないので
FragmentAの sm で取り扱ってデータをクリアして、FragmentBに移った。
そして、FragmentBからFragmentAに戻ると例外で停止する。なぜ?
MainActivityからFragmentAへ遷移は問題なし。
FragmentBからFragmentAに遷移で例外停止。?
悩みに悩んで試行してもダメ。
プログラムコードを考えるのを止めて、機能でブロック的に考察すると
遷移の違いは、onDestroy() の実行の有無。判明した事は...。
MainViewModel の screenManager の保存しているデータをクリアしていました。
FragmentAが再開するときにそれが無かったので例外停止することに...。
sm.finish() が、viewModel.screenManager内のデータをクリアしてるのを気が付くのに時間かかった...。
sm.finish() を削除したら期待通りに動いた。 疲れたぁ。