どんな内容
FragmentでBackボタンの処理を変更する処理の書き方がネットで見つけたものがことごとくうまくいかなかったので、上手くいった方法のメモです。
androidx.activityのバージョンが関係してそうなので、今回のバージョンは
androidx.appcompat:appcompat:1.1.0
です。
参考にしたけどうまくいかなかっもの
@tarumzu さんの「AndroidXでのバックキー制御」について、onBackPressedDispatcherの使い方や注意点補足を読んで、これで出来そうって思ったんですが、ちょっとうまくいかなかったです。
ダメだったのが、
addCallback(this, object : OnBackPressedCallback {
override fun handleOnBackPressed(): Boolean {
~~ 略 ~~
の箇所
OnBackPressedCallbackに引数が必要みたい。
Booleanを返すメソッドが存在しないみたいだった。
どうしたのか
.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
~~ 略 ~~
となった。
ただ、これだと、
handleOnBackPressedでfalseを返す場合、 スタックに積まれたFlagment分すべて戻ってからActivityを終了させるといった動作になリます。
ただ、デフォルトの動作ではFragmentが載っていない、Activityのみのブランクページも表示されてしまうため、ブランクページを表示させたくない場合は別途下記のように書いてあげる必要があります。
が使えないので、
when {
フラグとか -> {
独自の処理
}
parentFragmentManager.backStackEntryCount > 0 -> {
parentFragmentManager.popBackStack()
}
else -> {
activity?.finish()
}
}
としました。
とりあえず、想定どおり動いています。