[Android & Kotlin] Fragment をActivityに追加

ActivityにFragmentをアタッチしてみましょう。

Android Studio
2021.1.1 patch 2




Fragment

 
前回は 簡単なFragmentを表示 させたので、最初からFragmentが表示されたままです。

Activityの実行中に、Fragmentの追加、削除、置換などのFragmentTransactionを実行することでプログラマブルにFragmentを扱えます。
 

 

Fragment をActivityに追加

 
プログラムでActivityのレイアウトにFragmentを追加するには、レイアウトにフラグメントコンテナとして機能するFragmentContainerViewを前回と同様に含め、FragmentTransactionを使用してFragmentをインスタンス化し、Activityのレイアウトに追加します。

 

Activity のレイアウト

activity_main.xml にFragmentContainerViewを追加しますが
android:name 属性はいりません

 

Fragment クラス

次にFramentを継承したクラスを作成。例として、SampleFragment とします。

1x1.trans - [Android & Kotlin] Fragment をActivityに追加

以下のように記述
SampleFragment.kt

 

Fragment のレイアウト

Fragment用のレイアウトファイル fragment_main.xml を作成
これにTextViewを入れて Hello Fragment の文字列をリソースから呼びます。
 
fragment_main.xml

 

AndroidX Fragment library

build.gradle にandroidx.fragment:fragment-ktxを追加します。
バージョンは適宜合わせてください

 

MainActivity

MainActivity.kt


savedInstanceState == null
最初に、BundleのsavedInstanceStateがnull、何もないときだけ設定をするようにします。FragmentはActivityのライフサイクル中に何度でも呼ばれることが可能なので最初だけ設定をするようにします。

setReorderingAllowed:
setReorderingAllowed(true)を使わないとFragmentの遷移、back stack やアニメーションに問題が生じるようです。

You should always use setReorderingAllowed(true) when performing a FragmentTransaction. For more information on reordered transactions, see Fragment transactions.

 

サンプルコード

 
プログラマブルな生成についてまとめてみます。
ただこのままだとFragmentの大きさやActivityとの違いが分かりにくいので、サイズや背景色を設定してみます。

activity_main.xml


SampleFragment.kt


fragment_main.xml


リソース
strings.xml


build.gradle


MainActivity.kt


これで実行させてみるとこのようになります。
全体のMainActivityの画面の中にある、Hello Fragmentの背景が灰色っぽい矩形範囲がFragmentになります。
 
1x1.trans - [Android & Kotlin] Fragment をActivityに追加


 
 

 
References:
androidx.fragment.app | Android Developers
フラグメント | Android Developers

シェアする

  • このエントリーをはてなブックマークに追加

フォローする