概要
Navigationを使った3画面の遷移。
ボタンを押すと所定の画面に遷移する。
プロジェクトの生成
いつもどおり、Fragment + ViewModelで作ることにする。
- Add No Activity ▷ Next
- Name: ThreeScreens ▷ Finish
- プロジェクトツール ウィンドウで app ▷ java ▷ com...threescreens ▷ New ▷ Activity ▷ Fragment + ViewModel 選択
- Configure Activity ダイアログで □Launcher Activity にチェックして Finish 選択
Navigation Graph リソースファイルの作成 - navigation_graph.xml
生成
- app ▷ res ▷ New ▷ Android Resource File 選択
- New Resource File ダイアログで以下を設定
- File Name: navigation_graph
- Resource type: Navigation
- 警告が出る。navigation関連のライブラリの dependencyに関するもの。OKを選択。
プロジェクト ウィンドウの res の下に navigation_graph.xmlが生成される。
できた navigation_graph.xml は 下のとおりの中身。
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/navigation_graph">
</navigation>
main_activity.xml
- app ▷ res ▷ layout ▷ main_activity.xmlをデザインモードで開く
- パレットから Containers ▷ NavHostFragment を選択しコンテナ領域にドロップする
- Navigation Graphs ダイアログで navigation_graph.xml を選択 ▷ OK
- 追加した NavHostFragmentの IDを my_nav_host_fragment とする。
ここまでで main_activity.xml ファイルはこうなる。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
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:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" app:navGraph="@navigation/navigation_graph" app:defaultNavHost="true"
android:id="@+id/my_nav_host_fragment"/>
</FrameLayout>
MainActivity.kt
起動時に man_fragment.xmlが読み込まれないようにするため、MainActivit.ktの以下の5行をコメントアウトする。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
//if (savedInstanceState == null) {
// supportFragmentManager.beginTransaction()
// .replace(R.id.container, MainFragment.newInstance())
// .commitNow()
//}
}
}
Navigation Graphリソースファイルの編集 - navigation_graph.xml
destination 追加アイコンをクリックして、まずは、main_fragmentを追加する。
追加した結果、「家」のアイコンがついている。これは、 start destination であることを表している。
追加した結果、「家」のアイコンがついている。これは、 start destination であることを表している。
Graphに second_fragment を追加 - fragment_second.xml
- New destination アイコンをクリック
- Create new destination をクリック
- New Android Component ダイアログで次を設定し Finish
- Fragment Name: SecondFragment
- Fragment Layout Name: fragment_second
Graphに third_fragment を追加 - fragment_third.xml
上記と同様の方法で third fragmentを追加する
- Fragment Name: ThirdFragment
- Fragment Layout Name : fragment_third
Graphに画面遷移の矢印を引く - actionの定義 - navigation_graph.xml
レイアウト デザインの画面で、3つのフラグメントに対して、それぞれ別の2つへの遷移の矢印線を引く。各矢印が actionになる。 actionも 属性(Attributes)を持つ。IDと遷移先のフラグメントは自動的に割り当てられるので基本的には変更不要。変更しても良い。好き好き。
| # | actionのID | Destination |
|---|---|---|
| 1 | action_mainFragment_to_SecondFragment | secondFragment |
| 2 | action_mainFragment_to_thirdFragment | thirdFragment |
| 3 | action_secondFragment_to_mainFragment | mainFragment |
| 4 | action_secondFragment_to_thirdFragment | thirdFragment |
| 5 | action_thirdFragment_to_mainFragment | mainFragment |
| 6 | action_thirdFragment_to_secondFragment | secondFragment |
以上でレイアウト関連は終わり。
すでに次の3つの Classファイルもできている。
- MainFragment.kt
- SecondFragment.kt
- ThirdFragment.kt
Kotlin コードの編集は次回。






0 件のコメント:
コメントを投稿