LoginSignup
3
2

More than 3 years have passed since last update.

【Android】FragmentでBackボタンを押した際のイベントを簡単に制御する

Last updated at Posted at 2020-04-22

概要

  • とあるアプリを作成しているときにバックボタンを無効化する処理を入れたかったので、その備忘録
  • ActivityだったらOnBackPressedをオーバーライドするだけでOKだが、fragmentではそうもいかない
MyActivity.java
@Override
    public void onBackPressed() {
      // バックボタンが押された際の処理を入れる
    }
  • Interface経由で値を渡すこともできるけど、IDとかタグの指定をするのも面倒。。。
  • もっと簡単な方法を探っていたところ、OnBackPressedDispatcherを使えばFragment内だけで実装可能のようです (最初からドキュメント見てれば一番早かった。。。)
  • https://developer.android.com/guide/navigation/navigation-custom-back

方法

MyFragment.java
public class MyFragment extends Fragment {
    private OnBackPressedCallback mBackButtonCallback;

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {

        mBackButtonCallback = new OnBackPressedCallback(true) {
            @Override 
            public void handleOnBackPressed() {
                // バックボタンが押された際の処理を入れる
            }
        };
        requireActivity().getOnBackPressedDispatcher().addCallback(this, mBackButtonCallback);
    }

    @Override
    public void onDestroy(){
        mBackButtonCallback.remove();
        super.onDestroy();
    }
}

備考

  • 非常に楽なんですが、これを実装する際はonDestroyなどでremove()して明示的にコールバックを解放しないと、他のFragmentなどでも処理が実行されてしまいます。
  • 勝手に解放してくれるわけではないので、その点だけ注意が必要かと思います。
3
2
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
3
2