Navigation

简介

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

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

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

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

嵌套图表、全局操作

目的地之间传递数据

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

  • 接收的Fragment中设置参数,负责接收

            
            
        

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

  • 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)