現役AndroidエンジニアがAndroid Kotlin Fundamentalsコードラボに挑戦！その３

## 前回
https://qiita.com/hayashidamoka/items/f527b3fc9c7b854ce2d3

## Lesson 3: Navigation

## 03.1: Create a fragment
https://developer.android.com/codelabs/kotlin-android-training-create-and-add-fragment?index=..%2F..android-kotlin-fundamentals#0

### 内容
- クイズアプリの作成
 - フラグメントの追加

　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/b90e58c9-3ca5-6358-3f48-fc686670ec57.png>　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/e3e79fa7-ba61-db37-28fa-3a47e19d76e5.png>

### メモ
- フラグメントをコンパイルするには、バインディングオブジェクトを作成し、フラグメントのビューを拡張する
- アクティビティのレイアウトファイルに < fragment > 要素を追加する
- 1つのアクティビティで複数のフラグメントを使用したり、1つのフラグメントを複数のアクティビティで使用したりできる

## 03.2: Define navigation paths
https://developer.android.com/codelabs/kotlin-android-training-add-navigation#0

### 内容
- クイズアプリの作成
 - ナビゲーションコンポーネントの追加
 - ナビゲーションホストフラグメントの使用
 - 条件付きナビゲーションの追加<br>
→ クイズの正誤で遷移先を変える<br>
 - バックキーの遷移先を指定
 - アクションバーに戻るボタン追加
 - アクションバーにオプションメニューの追加
 - ナビゲーションドロワーの追加
 - ハンバーガーボタンからナビゲーションドロワーを開く
 - 宿題:タイトル画面にルールボタンとバージョン情報ボタンを追加する
 - 宿題:ルール画面とバージョン情報画面にプレイボタンを追加、そこからの遷移でゲーム画面から戻ったときにタイトル画面を表示する

　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/1231850b-244e-1598-b260-b369a7ccab0c.png>　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/7ca89cac-638e-9fba-4478-f250cfcc399f.png>
　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/91792f5b-674b-cee2-9750-ef6b4b93e6d9.png>　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/5360e90c-0134-18f6-b3da-619874255916.png>
　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/e20eb909-17e5-9826-adb8-18b5ae046961.png>　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/069b0da0-bd37-90a2-d420-4b345fbed2eb.png>
　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/9a6bae6d-c9c3-ce80-a191-d3bbf8a8de5f.png>　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/e2458dd4-bfe0-90f2-63a6-426f136a3db8.png>
　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/13cc02b2-171f-827f-15a7-8db14c32f0d5.png>　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/5cbcfd74-e8cc-06fc-bd95-bd9d91eefc70.png>
　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/72ef331f-68a0-add3-865d-8fb0629881f2.png>

### メモ
- ナビゲーションホストフラグメントは自作せず、androidx.navigation.fragment.NavHostFragmentを使用する
- アクションバーの戻るボタンは　NavigationUI.setupActionBarWithNavController　で追加できる
- bindingさせたいViewのレイアウトファイルはlayoutタグで全体を囲む！

## 03.3: Start an external Activity
https://developer.android.com/codelabs/kotlin-android-training-start-external-activity#0

### 内容
- クイズアプリの作成
 - ゲーム結果を共有する<br>
→NavDirectionを活用して引数を渡す<br>
→暗黙的インテントを活用して他のアプリを呼び出す


　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/91c07b40-c40f-c23e-2da5-f7e2b1fdbc4d.png>　　　<img width="30%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/69544791-8cfd-411c-9b22-2f100e19f274.png>


### メモ
- packageManagerを使って端末内のアプリを取得することができる！
- フラグメント間でデータを渡す時はSafeArgsを使用するとエラーをキャッチできる

### 感想
その2までは割と知っていることも多かったが、
今回は使ったことのないものばかりでてきて難しかった。
使ったことのない機能をたくさんつかってアプリを作っていくのはおもしろかった！
クイズアプリの内容もAndroid開発に関することなので、動作テスト中にも勉強ができてよかった笑
個人的にnavigationのDesignをつくるときが結構楽しい↓
![スクリーンショット 2021-08-27 8.31.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394720/d5e6c73e-98a7-cb84-e1ef-a78a3ef1ca98.png)
今すぐ使いこなすのは難しそうだけど読めるようになったのは大きな成果だと思う！！
次はよくわからなくなりがちだけどとっても大事なライフサイクルのお勉強！
がんばるぞ〜！💪

かかった時間　約6時間