[Android] Activity と Fragment の画面遷移

cat63 01 - [Android] Activity と Fragment の画面遷移

FragmentをActivityからコードで設定してHello Worldを表示させてみましたが、今度はActivityからFragment画面への切り替えをしてみましょう。いわゆる画面遷移ですが、Activity間の移動ではないので重くありません。

Android Studio 3.4.2
API 29
AndroidX

 



ActivityからFragmentに画面遷移

 
Fragmentが現実的に使われるケースを想定して、

  1. 任意のタイミングで起動
  2. パラメータを渡してインスタンス生成
  3. Activityに戻る

という観点を考えてみます。
 

 

任意のタイミングで起動

 
これはButtonを使って任意のタイミングでFragmentを起動できます。
 
ActivityにボタンタップでFragmentのインスタンス生成を行います。これは前回のコードで記述したFragmentの張り付け部分を使います。
 

cat62 00 100x100 - [Android] Activity と Fragment の画面遷移
FragmentはActivityと共に重要な機能を果たしていますが、いまいちわかりにくところがあります。最初に簡単なHello W...

 
Activity:

 

パラメータを渡してインスタンス生成

 
Fragmentの場合コンストラクタの引数で渡したり、setterから取り出したりすると問題があります。

Fragmentは引数のないコンストラクタが必要で、フレームワークは必要に応じFragmentを再インスタンス化することが多く、引数のないコンストラクタが利用できなと例外が発生してしまいます。

引数を前提としてインスタンスを生成させていると、ステムからFragmentの再生成されるときにクラッシュするかもしれないわけです。
 
解決方法としては、
静的な newInstance()を使ってフラグメントをインスタンス化する
これがベストプラクティスと言われています。
 
Activity:

 
newでインスタンス生成して、Bundleに設定したいパラメータをsetArguments()で追加します。
Fragment:

 
Bundleから getArguments() で取り出す

 

Activityに戻る

 
ButtonでFragmentが張り付けを行い、Activityに戻りたい場合にバックスタックを使います。
 

 
これをトランザクションに設定すると、トランザクションの開始時のFragment状態がスタックに積まれまれて、戻るボタンで前の状態に戻ることが可能になります。

 

サンプルコード


 
ActivityにFragmentに画面遷移、”Fragment”の文字列をTextViewに表示させる。(実際はactvity_mainにあるcontainerにFragmentを張り付け)
BackボタンでFragmentからActivityに戻る
まとめてみます。
 
MainActivity.java

 
TestFragment.java

 
onViewCreated() はonCreateView()のViewを作成の直後に呼ばれます。ですからonCreateView()に入れ込んでいる記述も多く見かけます。
 
activity_main.xml

 
fragment_main.xml

 
strings.xml

 

サンプル動画

 

 
Fragmentはactivity_mainのcontainerに張り付けているためButtonが残ってしまいますが、containerを画面一杯にするようにレイアウトすればこれを避けることができます。
 
 
関連ページ:

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

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加




アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう、時間の制約がないところが一番の魅力です。

以下の3つはAndroidが学習できるオンラインスクールです。


TECH ACADEMY
Androidアプリコース



侍エンジニア塾
侍エンジニア塾 無料体験レッスン



CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp





正直ネットや本では限界があります。直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。

尚、スクールがダメだと言う人がいますが、やる気があれば問題ありません。与えられるのを待っていてはいけないですね
欲しいものは取りに行くのです。


Google Pixel 3 XLグローバル版
SIMフリー 並行輸入品
6.3インチの大画面
背景をぼかすポートレートモード撮影


Anker PowerCore II Slim 10000
Power IQ 2.0搭載
iPhone & Android対応

シェアする

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

フォローする