LoginSignup
2
1

More than 3 years have passed since last update.

【Android/Java】Fragmentに戻るボタンを設置する

Last updated at Posted at 2020-11-08

はじめに

フラグメントでの戻るボタンの設置において、
親Activity内で定義して呼び出す書き方にしていたのですが、
Activityに置かずに各Fragmentから直接中身を呼び出すほうがいい
と、ベテランエンジニアから指摘をいただいたので備忘録として両パターン残しておきます。

①MainActivityから呼び出す方法

MainActivity.java
public class MainActivity extends AppCompatActivity {

//  戻るボタンを定義
    public void setupBackButton(boolean enableBackButton) {
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(enableBackButton);
    }
}
Fragment1.java
 // onCreateView内で呼び出す
 MainActivity activity = (MainActivity) getActivity();
 activity.setupBackButton(true);
 setHasOptionsMenu(true);  // FragmentでActionBarを使うために必要な設定
Fragment2.java
 // onCreateView内で呼び出す
 MainActivity activity = (MainActivity) getActivity();
 activity.setupBackButton(false);

②Fragmentから直接呼び出す方法

Fragment1.java
 // onCreateView内で呼び出す
 .setupBackButton()
 setHasOptionsMenu(true);  // FragmentでActionBarを使うために必要な設定

 // Fragmentクラス内で定義
 public void setupBackButton() {
        AppCompatActivity activity = (AppCompatActivity) getActivity();
        ActionBar actionBar = activity.getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
  }

※下記はFragment1から遷移したときに戻るボタンが表示されてしまうのを防ぐために記載してます。
必要可否は各自判断してください。

Fragment2.java

 // onCreateView内で呼び出す
 .hideBackButton()

 // Fragmentクラス内で定義
 public void hideBackButton() {
        AppCompatActivity activity = (AppCompatActivity) getActivity();
        ActionBar actionBar = activity.getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(false);
  }

違い

ぱっと見た感じ同じですが、Activityの取得先が違います!
①MainActivity activity = (MainActivity) getActivity();
②AppCompatActivity activity = (AppCompatActivity) getActivity();

特定のActivity(今回だとMainActivity)が前提の書き方はやめたほうがいいとのことです。
前提となるクラス(自分で定義したクラス)が増えるほどコードは安全な変更がしづらくなるからです。

取得先がAppCompatActivityであれば継承元なので変更されることはほぼないし安全性が高いということでしょうかね。
先を見据えた実装ができる強強エンジニアになりたいです。

2
1
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
2
1