LoginSignup
2
1

More than 3 years have passed since last update.

【Android / Java】表示Fragmentによりイベントを切り替える

Last updated at Posted at 2020-10-10

はじめに

Android Studio(java)でアプリを開発していて、「表示しているフラグメントに応じて端末の戻るボタンを押した時の処理を切り替える」という実装をしたい場面があった。
そのときに学んだ内容を投稿します。

学んだ内容

コードの一部を記載

ActivityからFragmentを表示

このアクティビティxmlファイルにフラグメントを表示させる

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/fl_activity_main"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

フラグメントの表示処理はこのように行う

MainActivity.java
// 指定したフラグメントを表示するメソッド。引数のfragmentに表示したいフラグメントのインスタンスを渡す。
public void showFragment(Fragment fragment, FragmentManager fragmentManager) {

    fragmentManager
            .beginTransaction()
            .replace(R.id.fl_activity_main, fragment)
            .addToBackStack(null)
            .commit();
}

表示しているFragmentを取得してイベント(処理)を行う

今回は例として、端末の戻るボタンを押したときに表示されているフラグメントがFooFragmentまたはBarFragmentであれば、アクティビティを終了させる、という実装にしている。

MainActivity.java
// onBackPressed()は端末の戻るボタンを押した時に呼ばれるメソッド
@Override
public void onBackPressed() {
  // ここで現在表示しているフラグメントを取得
  // findFragmentById()の引数にはフラグメント表示のreplace()で表示先のレイアウト部品のid(コンテナ)を入れる。
  Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fl_activity_main);

   // FooFragmentまたはBarFragmentを表示しているときにはアクティビティを終了(finish)
   if (fragment instanceof FooFragment || fragment instanceof BarFragment) {
     finish();
   }
   super.onBackPressed();
}

最後に

どのように表示しているフラグメントを判断させるか、意外と簡単に実装ができた。
今後も学習した内容を積極的にアウトプットしていきます。

参考資料

ありがとうございました!!

Android 初めてのFragment イベント編

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