美文网首页
Navigation

Navigation

作者: 爱做梦的严重精神病患者 | 来源:发表于2020-03-27 10:38 被阅读0次

    简介

    navigation(导航)一般应用在一个主Activity和多个Fragment的情景中。在具有多个 Activity 目的地的应用中,每个 Activity 均拥有其自己的导航图。

    导航组件由以下三个关键部分组成:

    • 导航图:一个包含所有导航相关信息的 XML 资源。这包括应用内所有目的地和路径。
    • NavHost:用于显示导航图中目的地的空白容器,在Activity布局中配置实现。导航组件包含一个默认 NavHost 实现 (NavHostFragment),可显示 Fragment 目的地。
    • NavController:在 NavHost 中管理应用导航的对象。当用户在整个应用中移动时,NavController 会安排 NavHost 中目的地的交换。

    在应用中导航时,您告诉 NavController,您想沿导航图中的特定路径导航至特定目标,或直接导航至特定目标。NavController 便会在 NavHost 中显示相应目标。

    嵌套图表、全局操作

    目的地之间传递数据

    首先在接收参数的目的地中设置参数类型、名称:

    • 接收的Fragment中设置参数,负责接收
    <fragment
                android:id="@+id/firstFragment"
                android:name="com.futuring.jetpackdemo.FirstFragment"
                android:label="FirstFragment">
                <argument
                    android:name="EMAIL"
                    android:defaultValue="2005@qq.com"
                    app:argType="string" />
                <action
                    android:id="@+id/action_firstFragment_to_thirdFragment"
                    app:destination="@id/thirdFragment" />
            </fragment>
    

      
    之后在路径(action)中设置参数类型:

    • action中附加参数,实现传递参数的功能
            <action
                android:id="@+id/action_mainFragment_to_navigation"
                app:destination="@id/firstFragment">
    
                <argument
                    android:name="EMAIL"
                    android:defaultValue="2005@qq.com"
                    app:argType="string" />
    
            </action>
    

    Safe Args

    Navigation 组件具有一个名为 Safe Args 的 Gradle 插件,该插件可以生成简单的 object 和 builder 类,以便以类型安全的方式浏览和访问任何关联的参数。强烈建议将 Safe Args 用于导航和数据传递,因为它可以确保类型安全

    启用Safe Args后,会自动生成一些代码。生成的代码会为每个源目的地、接收目的地以及每个操作,生成以下类型安全的类和方法。

    • 为生成操作的每一个源目的地创建一个类。该类的名称是在源目的地的名称后面加上“Directions”。例如,如果源目的地是名为 SpecifyAmountFragment 的 Fragment,则生成的类的名称为 SpecifyAmountFragmentDirections。该类会为源目的地中定义的每个操作提供一个方法。

    • 对于用于传递参数的每个操作,都会创建一个内部类,该类的名称根据操作的名称确定。例如,如果操作名称为 action_mainFragment_to_secondFragment,,则类名称为 ActionMainFragmentToNavigation(也不一定)。如果您的操作包含不带 defaultValue 的参数,则您可以使用关联的 action 类来设置参数值。

    • 接收目的地创建一个类。该类的名称是在目的地的名称后面加上“Args”。例如,如果目的地 Fragment 的名称为 ConfirmationFragment,,则生成的类的名称为 ConfirmationFragmentArgs。可以使用该类的 fromBundle() 方法检索参数。

    MainFragmentDirections.ActionMainFragmentToNavigation action = MainFragmentDirections
                    .actionMainFragmentToNavigation().setEMAIL("@qq.com");
    

    相关文章

      网友评论

          本文标题:Navigation

          本文链接:https://www.haomeiwen.com/subject/zdzkuhtx.html