0
0

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.

FragmentでBackボタンの処理をする

Posted at

どんな内容

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()
    }
}

としました。
とりあえず、想定どおり動いています。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?