Safe Args ist ein treuer Assistent der Navigationskomponente

In diesem Artikel erfahren Sie, wer diese sicheren Argumente sind, wie sie das Leben erleichtern und was das Produkt ihrer Arbeit ist, auch hinter den Kulissen.





Sie befinden sich jetzt im zweiten Teil eines großen Artikels über die Navigationskomponente in einem Projekt mit mehreren Modulen. Wenn Sie zum ersten Mal von der Navigationskomponente hören, empfehle ich Ihnen, zuerst die Navigationskomponente zu lesen . Wenn Sie bereits mit den Grundlagen vertraut sind, können Sie zu den interessantesten übergehen:





Safe Args ist ein Plugin, das von der Navigationskomponente getrennt ist, jedoch speziell entwickelt wurde, um die Arbeit mit der Bibliothek zu vereinfachen. Damit ist es nicht erforderlich, die Ziel-ID anzugeben und Parameter über das Bundle zu übergeben - das Plugin generiert hierfür separate Klassen und verfügt über eine Reihe von Erweiterungen, um mit ihnen zu arbeiten. Lassen Sie uns herausfinden, wie das alles funktioniert.





Zunächst gibt es zusammen mit dem Plugin ein neues Tag in xml: <argument>. Es kann sowohl auf die Aktion als auch auf das Ziel angewendet werden. Auf diese Weise können Sie Parameter bequemer senden und empfangen. Zweitens werden basierend auf den im Diagramm angegebenen Bildschirmen und Übergängen spezielle Klassen generiert, die im NavController anstelle der ID-Aktion angegeben werden können.





Zeig mir den Code!

<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 ist eine nette Ergänzung zur Navigationskomponente, dank derer wir es uns leichter gemacht haben, mit der Übergangs-ID und der Handhabung des Empfangens / Sendens ihrer Argumente zu arbeiten. Ob Sie es verwenden oder nicht, liegt bei Ihnen, aber weitere Kommentare basieren auf der Verwendung dieses Plugins. Spoiler Alarm: Es wird viele Probleme bringen, aber am Ende werden alle glücklich sein :)





Und jetzt zum lustigen Teil. Lassen Sie uns einen Blick darauf werfen, wie Sie die Arbeit mit der Navigationskomponente in einem Projekt mit mehreren Modulen zusammen mit SafeArgs und einer iOS-ähnlichen Multistack-Navigation organisieren können .












All Articles