[Android & Kotlin] FragmentをHello Worldから

FragmentはActivityと共に重要な機能を果たしていますが、いまいちわかりにくところがあります。最初に簡単なHello Worldを表示させるところから始めてみましょう。

Android Studio
2021.1.1 patch 2




Fragment

 

AndroidではActivityは重要な機能を司っていますが、勢いなんでもかんでもActivityに機能を入れてしまって巨大なActivityが出来上がってしまいます。これではメンテナンスがやりにくいコードになってしまい、チームでの開発がより困難になります。
 
Fragmentは「断片」という意味ですが、ActivityのUI部分を肩代わりでき、いくつものFragmentをActivityから開いたり閉じたりできます。
 
また、複数のActivityから使いまわすような再利用も可能です。
 
1x1.trans - [Android & Kotlin] FragmentをHello Worldから


 
Activityには以下の役割があります
  • Viewの生成と制御
  • リソースを取得したりするContextのタスク
  • コンポーネントとしてIntentを受け取る

ActivityにはActivityにしか出来ない事を担わせて、View生成と制御の部分はFragmentに任せようということです。

Fragmentの作成はXMLレイアウトファイルに静的に記述するやり方と
プログラマブルにダイナミックな動きができるように記述する方法があります。

 

 

XMLレイアウトファイルに記述

 

例えばレイアウトファイルにTextViewを貼っただけのような形でFragmentを生成します

Activity のレイアウト

activity_main.xml にFragmentContainerViewを追加します。

 
android:nameには パッケージ名 + Fragmentクラス名 を入れます。
この例ではパッケージ名:com.example.testfragment
Fragmentクラス名:SampleFragment
なので
com.example.testfragment.SampleFragment
(このままコピペしないように)

Fragment クラス

次にFramentを継承したクラスを作成します。

1x1.trans - [Android & Kotlin] FragmentをHello Worldから

例として、SampleFragment とします

1x1.trans - [Android & Kotlin] FragmentをHello Worldから

SampleFragmentの空のクラスができました

1x1.trans - [Android & Kotlin] FragmentをHello Worldから
 

以下のように記述
SampleFragment.kt

 
onCeateView():
ActivityのようにFragmentにもライフサイクルがありViewを生成するタイミングで呼ばれるのが onCeateView() です。

onCreateViewで渡される LayoutInfrater でFragmentのレイアウトを返します。
 

Fragment のレイアウト

Fragment用のレイアウトファイル fragment_main.xml を作成します
fragment_main.xml
1x1.trans - [Android & Kotlin] FragmentをHello Worldから

これにTextViewを入れて Hello Fragment の文字列をリソースから呼びます。
 

MainActivity

ActivityにはFragmentについての記述は何も必要ありません
MainActivity.kt

 

サンプルコード

 

まとめてみますが、このままだとFragmentの大きさやActivityとの違いが分かりにくいので、サイズや背景色を設定してみます。

acitivity_main.xml

SampleFragment.kt

fragment_main.xml

リソース
strings.xml

MainActivity.kt

これで実行します。

1x1.trans - [Android & Kotlin] FragmentをHello Worldから

 
 
<fragment>
以前はレイアウトに <fragment> タグを使っていたのですがFragmentContainerViewに変えるようにとワーニングがでるようになりました

1x1.trans - [Android & Kotlin] FragmentをHello Worldから


 
ところが、
フラグメント | Android デベロッパー | Android Developers(2021-10-27 ) では

を使う例が記載されています。
色々と新しい記事を探してみると
Create a fragment | Android Developers(2022-04-06) では

It is strongly recommended to always use a FragmentContainerView as the container for fragments, …

ということでFragmentContainerViewを使うことを強く推奨されています。
Googleの日本語翻訳版はいつも遅いので、と言ってもわずか半年のズレなので自分で気を付けるしかないでしょう

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

シェアする

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

フォローする