タブレット用プログラムの書き止め

android OS & iPadOS の記録。

Activity -> FragmentA -> FragmentB -> FragmentA で例外発生

2024-03-13 23:49:20 | Android studio 日記

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() を削除したら期待通りに動いた。 疲れたぁ。

 


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする