Safe Argsは、ナビゲーションコンポーネントの忠実なアシスタントです

この記事では、このSafe Argsが誰であるか、それがどのように生活を楽にするか、そして舞台裏を含め、その仕事の成果は何であるかを学びます。





これで、マルチモジュールプロジェクトのナビゲーションコンポーネントに関する大きな記事の第2部になりました。ナビゲーションコンポーネントについて初めて聞く場合は、最初にナビゲーションコンポーネントとは何かを読むことをお勧めしますすでに基本に精通している場合は、最も興味深いものに進むことができます。





Safe Argsは、ナビゲーションコンポーネントとは別のプラグインですが、ライブラリの操作を簡単にするために特別に作成されました。これを使用すると、宛先IDを指定して、バンドルを介してパラメーターを渡す必要はありません。プラグインは、このために個別のクラスを生成し、それらを操作するための一連の拡張機能を備えています。それがすべてどのように機能するかを理解しましょう。





まず、プラグインとともに、xmlに<argument>という新しいタグがあります。アクションと宛先の両方に適用できます。これにより、より便利な方法でパラメーターを送受信できます。次に、グラフで指定された画面と遷移に基づいて、idアクションの代わりにNavControllerで指定できる特別なクラスが生成されます。





コードを見せて!

<navigation    
    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/graphuserflow”    
    app:startDestination=”@id/fragmentUserList”>    
    <fragment        
        android:id=”@+id/fragmentUserList”        
        android:label=”FragmentUserList”        
        android:name=”com.example.usersList.UserListFragment”        
        tools:layout=”@layout/fragmentuserlist”>            
        <action            
            android:id=”@+id/actiontouserdetails”            
            pp:destination=”@id/fragmentUserList” >            
            <argument                
                android:name=”userId”                
                app:argType=”integer”                
                app:nullable=”false” />         
        </action>    
    </fragment>    
    <fragment        
        android:id=”@+id/fragmentUserDetails”        
        android:label=”FragmentUserDetails”        
        android:name=”com.example.usersList.UserDetails”        
        tools:layout=”@layout/fragmentuser_details”/>
</navigation>
      
      



: , , .  —  <argument>, users details userId. , .





class UserListFragmentDirections private constructor() {
    private data class ActionUserFromListToDetails(
    val userId: Int
    ) : NavDirections {
        override fun getActionId(): Int = R.id.actionToUserDetails
        
        override fun getArguments(): Bundle {
            val result = Bundle()
            result.putInt(“userId”, this.userId)
            return result
        }
    }
    companion object {
        fun actionToUserDetails(userId: Int): NavDirections =
        ActionToUserDetails(userId)
    }
}
      
      



generated- , ,  — , , . userId.





:





navController.navigate(
    UserListFragmentDirections.actionToUserDetails(userId)
)
      
      



destination- extension, .





private val args by navArgs<UserDetailsFragmentArgs>()
private val userId by lazy { args.userId }
      
      



, Bundle, .





Safe Argsは、ナビゲーションコンポーネントへの優れた追加機能です。これにより、遷移IDの操作と、引数の送受信の処理が簡単になりました。それを使用するかどうかはあなた次第ですが、さらなるナレーションはこのプラグインの使用に基づいています。ネタバレ注意:それは多くの問題をもたらすでしょう、しかし結局誰もが幸せになるでしょう:)





そして今、楽しい部分に。SafeArgsおよびiOSのようなマルチスタックナビゲーションとともに、マルチモジュールプロジェクトでナビゲーションコンポーネントを使用して作業を整理する方法を見てみましょう












All Articles