yumemi-inc / android-training-template

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Navigation Component による画面遷移

Seo-4d696b75 opened this issue · comments

Navigation Componentを利用します

Note

Required(先に完了させましょう)

課題内容

  • Navigationのセットアップ
  • Navigationで画面遷移を実装する
  • SafeArgsでメイン画面から詳細画面にデータを渡す

Navigation Component

これまで画面遷移(Fragmentのトランザクション)はFragmentManagerを直接利用していました。Naviigationを利用するとより効率的に安全にFragmenの画面遷移を実装できます。

  • NavGraphの定義により宣言的に画面遷移を扱える
  • 遷移先にデータを安全に渡せる

SafeArgs

Navigationにおいてデスティネーション(遷移先のFragment)には引数を設定することができます。この引数を型安全に扱うためのGradleプラグインがSafeArgsです。プラグインのセットアップ方法は公式ドキュメントを参照してください。

例えば、次のようなデスティネーションにString型の引数を定義すると、

    <fragment
        android:id="@+id/myFragment"
        android:name="jp.co.yumemi.droidtraining.ui.MyFragment"
        android:label="Forecast">
        <argument
            android:name="key"
            app:argType="string" />
    </fragment>

MyFragmentをデスティネーションとするactionにはString型の引数が必要になります

val action = SomeFragmentDirections.someAction("value")

受け取るFragment側ではnavArgsで引数を取得できます。

// MyFragmentArgsはプラグインが自動生成した引数の型です
val args: MyFragmentArgs by navArgs()
val key: String = args.key

val viewModel: MyViewModel by viewModels()

ViewModelで引数を受け取ることもできます。

@HiltViewModel
class MyViewModel @Inject constructor(
    savedStateHandle: SavedStateHandle,
) : ViewModel() {

    private val args by lazy {
        MyFragmentArgs.fromSavedStateHandle(savedStateHandle)
    }
}

参考資料