ナビゲーションコンポーネントの教育プログラム:すべてのチュートリアルをスキップした人向け

このストーリーは、ナビゲーションコンポーネントをまだ認識していない人を対象としています。ここでは、ライブラリの主要な要素を調べて、すべてがどのように見えるかを確認します。





これで、マルチモジュールプロジェクトのナビゲーションコンポーネントに関する大きな記事の最初の部分になりました。すでに基本に精通している場合は、次の部分に進むことをお勧めします。





TL; DR 。:





ナビゲーションコンポーネントを使用してアプリケーションでナビゲーションを整理するには、次のものが必要です。





  1. グラフを作成します。





  2. それに画面を追加します。





  3. それらの間に遷移を追加します。





  4. 必要に応じてネストされたグラフを追加します。





  5. このすべての混乱をNavHostに置きます。





  6. コード内の遷移を示します。





基本的なナビゲーションコンポーネント

1.ナビゲーショングラフは、ナビゲーションの基本単位です。これは、頂点が画面であり、エッジがそれらの間の遷移であるグラフです。グラフは、res / navigationフォルダー内の別のxmlファイルに作成されます。navControllerを誤解させないために、グラフで開始点を指定する必要があります(startDestination)





2.宛先は、グラフ上のUIユニットを表します(フラグメント/アクティビティ/ダイアログ/ NestedGraph)。





3. Action destination- . ( ), ( , ).





4. Nested Graph —  . , <include>.





5. NavHost — , . , NavHostFragment, . :





<androidx.fragment.app.FragmentContainerView
    android:id="@+id/navHost"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav_main" />
      
      



6. NavController — , . . NavController —  , , , , , shared- .





画面間の遷移

画面間の遷移は、アクションまたはディープリンクを介して実行できます。





アクションを伴う移行





それはどのようなものか:





<action
    android:id=”@+id/action_to_user_details”
    app:destination=”@id/userDetailsFragment”
    app:enterAnim=”@anim/add_fragment_animation”
    app:exitAnim=”@anim/pop_fragment_animation”
    app:popEnterAnim=”@anim/pop_enter_animation”
    app:popExitAnim=”@anim/pop_exit_animation”>
      
      



トランジションの呼び出し:





navController.navigate(
    R.id.action_to_user_details,
    Bundle().apply {putString(USER_ID, userId)}
)
      
      



「もう一方の端」で議論を得る:





private val userID by lazy {
    arguments!![USER_ID]
}
      
      



ディープリンクでナビゲートする





それはどのようなものか:





<deepLink 
    app:uri=”app://customUri?parameter={parameterName}”
/>
      
      



トランジションの呼び出し:





navController.navigate(
    Uri.parse(“app://customUri?parameter=$reason”)
)
      
      



「もう一方の端」で議論を得る:





private val refundId by lazy {
    arguments?.getString(“parameter”, null)
}
      
      



それで全部です!シンプルでわかりやすい-これがナビゲーションコンポーネントが勝つものです。今すぐにダイブしましょう安全Argsのは作品をプラグインする方法とそれがないとまで降りSafeArgsのマルチモジュールプロジェクトでのナビゲーションコンポーネントと連携し、iOSのようなmultistackナビゲーション








All Articles