首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JetPack指路明灯—Navigation

,通过这个属性,可以让当前的NavHostFragment拦截系统的返回键,也就是说,只要当前Fragment堆栈中有元素,就拦截系统返回键,用于Fragment堆栈的出栈,直到堆栈中只剩下一个元素,则将系统返回值的功能交还给...NavOptions.Builder() .setPopUpTo(R.id.fragmentOne, true) .build() Navigation动态加载 除了在xml中设置navGraph...,有很多场景下,我们会根据业务场景动态设置一些navGraph,或者某些navGraph是需要动态获取一些参数之后才去初始化的,这时候,就可以使用Navigation的动态加载方案。...首先,需要在Fragment容器中,去掉navGraph的引用,然后在Activity中,动态指定要引用的navGraph,代码如下所示。...,Navigation动态加载也是将navGraph从xml中创建好之后设置给navigation,接收参数的话,与正常的参数传递是一样的。

1K20

【Android进阶必学】JetPack指路明灯—Navigation

,通过这个属性,可以让当前的NavHostFragment拦截系统的返回键,也就是说,只要当前Fragment堆栈中有元素,就拦截系统返回键,用于Fragment堆栈的出栈,直到堆栈中只剩下一个元素,则将系统返回值的功能交还给...NavOptions.Builder() .setPopUpTo(R.id.fragmentOne, true) .build() Navigation动态加载 除了在xml中设置navGraph...,有很多场景下,我们会根据业务场景动态设置一些navGraph,或者某些navGraph是需要动态获取一些参数之后才去初始化的,这时候,就可以使用Navigation的动态加载方案。...首先,需要在Fragment容器中,去掉navGraph的引用,然后在Activity中,动态指定要引用的navGraph,代码如下所示。...,Navigation动态加载也是将navGraph从xml中创建好之后设置给navigation,接收参数的话,与正常的参数传递是一样的。

2.1K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    写一个MVVM快速开发框架:谈一谈“单Activity+多Fragment”模式

    方式一: google的demo中是在MainActivity中创建一个main_navGraph,其中包含了不同子moduel的navGraph ,如下: navGraph文件,这种做法要求其指定startDestination,而且只能跳转到startDestination 配合BottomNavigationView使用: val navController...方式二: 因为app module本身是需要依赖各个子moduel的,我们可以在navGraph直接使用子moduel中的Fragment,主页面只需加入各个module的主Fragment就行了:...menu中的id与navGraph中设置成一样的啊哈哈哈哈 基本上ARouter+Navigation可以满足大部分的页面跳转需求,但还是有一些难点,就是不同moduel之间的navGraph怎么相互控制...相关视频: 价值100w+Android项目实战大全:MVVM详解 Android(安卓)开发零基础从入门到精通:MVVM实战

    1.8K40

    Jetpack组件之Navigation

    当用户通过显式深层链接打开您的应用时,任务返回堆栈会被清除,并被替换为相应的深层链接页面。当用户从深层链接页面按下返回按钮时,他们会返回到相应的导航堆栈。...在触发隐式深层链接时,返回堆栈的状态取决于是否使用 Intent.FLAG_ACTIVITY_NEW_TASK 标志启动隐式Intent。...如果该标志已设置,任务返回堆栈就会被清除,并被替换为相应的深层链接页面。与显式深层链接一样。 如果该标记未设置,您仍会位于触发隐式深层链接时所在的上一个应用的任务堆栈中。...可以使用查询参数占位符代替路径参数,也可以将查询参数占位符与路径参数结合使用。 使用默认值或可为 null 的值所定义的变量的查询参数占位符无需匹配。...FragmentNavigator并设置给NavController,需要注意的是我们要通过自定义的FragmentNavigator手动来创建Destination(目的地),布局中app:navGraph

    3K20

    Android Jetpack - 使用 Navigation 管理页面跳转

    左上角有个小房子的是显示的第一个页面,但由于 Activity 无法发起跳转,所以这里把 MainActivity 删除,把 MainFragment 作为主页面,并给它添加跳转到 SecondFragment...http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" app:startDestination...使用 android:name 指定 Fragment 的类型为 NavHostFragment,使用 app:navGraph 指定 Navigation 文件。...转场动画 如果需要自定义的页面转场动画,使用 Navigation 可以很方便的实现。 这里举个例子,比如我们需要一个从右向左切入的过场动画,先创建这个动画的 xml 文件: 堆栈处理,而且早期的 Fragment 坑比较多,处理不好容易出现页面穿透等问题。现在 Navigation 恰好解决了这些问题。

    2.4K10

    【Jetpack】Navigation 导航组件 ⑤ ( NavigationUI 类使用 )

    的界面导航 ; 本篇博客中介绍一种使用场景 : 使用 AppBar 中的菜单选项控制 Navigation 界面跳转 ; 在 Activity 中 , 使用 Navigation 组件 切换 Fragment...创建 Fragment 时 , 会自动生成对应的 布局文件 : 注意 : 该操作比较坑 , 生成 Fragment 时 , 会自动添加 Kotlin 语言插件的 Gradle 依赖 , 必要时可以删除该依赖..., app:startDestination="@id/fragmentA" 配置 , 用于配置默认的初始 Fragment 是哪一个 ; 3、Activity 导入 NavHostFragment 进入...Launcher 界面 MainActivity 的布局中 , 删除布局中的其它元素 ; 将 NavHostFragment 拖入到 布局中 , 拖入空间到布局后 , 松开鼠标 , 会弹出如下...app:layout_constraintTop_toTopOf="parent" /> b、处理 Navigation 导航逻辑 ( 重点 ) 首先 , 获取 NavController , 从布局文件中定义的

    95940

    知识点 | ViewModel 四种集成方式

    下面的文章中,我将介绍 ViewModel 的四种集成方式: ViewModel 中的 Saved State —— 后台进程重启时,ViewModel 的数据恢复; 在 NavGraph 中使用 ViewModel...当进程在后台被杀死后,用户又返回该应用时,Activity 也需要被重建。 在后两种情况中,我们通常都希望重建 Activity。...SavedStateHandle 和 Bundle 一样,以键值对形式存储数据,它包含在 ViewModel 中,并且可以在应用处于后台时进程被杀死的情况下幸存下来。...ViewModel 与 Jetpack 导航: 在 NavGraph 中使用 ViewModel 于 navigation 的 2.1.0-rc01 版本时加入 支持 Java 与 Kotlin 共享...ViewModel 与 NavGraph 集成 Navigation 2.1.0 中引入了依托一个导航图 (navigation graph) 创建 ViewModel 的功能。

    2.6K20

    知识点 | ViewModel 四种集成方式

    下面的文章中,我将介绍 ViewModel 的四种集成方式: ViewModel 中的 Saved State —— 后台进程重启时,ViewModel 的数据恢复; 在 NavGraph 中使用 ViewModel...当进程在后台被杀死后,用户又返回该应用时,Activity 也需要被重建。 在后两种情况中,我们通常都希望重建 Activity。...SavedStateHandle 和 Bundle 一样,以键值对形式存储数据,它包含在 ViewModel 中,并且可以在应用处于后台时进程被杀死的情况下幸存下来。...ViewModel 与 Jetpack 导航: 在 NavGraph 中使用 ViewModel 于 navigation 的 2.1.0-rc01 版本时加入 支持 Java 与 Kotlin 共享...ViewModel 与 NavGraph 集成 Navigation 2.1.0 中引入了依托一个导航图 (navigation graph) 创建 ViewModel 的功能。

    54420

    1. Jetpack源码解析---看完你就知道Navigation是什么了?

    背景 之前已经翻译过了Google官方的CodeLabs上面的教程,教程很详细,代码在Github上也可以找到,本篇文章旨在自己的APP上使用效果及演示Demo,来具体的使用Navigation。...基本使用 虽然在之前的文章中已经很详细的介绍了Navigation,但是这里也简单的叙述一下我在项目中的具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...startDestination是APP默认启动的页面,这里面必须要指定,否则会报错crash。...就是上面item的id要和navigation_main.xml中fragment的id相同,否则点击菜单不会切换fragment的。 配置完上面这些信息之后,怎么将他们绑定起来使用呢?...总结 4.1 流程 考虑到我们开始如果直接从setupWithNavController 入口进行分析的话,可能不太容易找到怎么创建的graph布局中的fragment,以及NavHostFragment

    2.6K30

    1. Jetpack源码解析---看完你就知道Navigation是什么了?

    背景 之前已经翻译过了Google官方的CodeLabs上面的教程,教程很详细,代码在Github上也可以找到,本篇文章旨在自己的APP上使用效果及演示Demo,来具体的使用Navigation。...基本使用 虽然在之前的文章中已经很详细的介绍了Navigation,但是这里也简单的叙述一下我在项目中的具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...startDestination是APP默认启动的页面,这里面必须要指定,否则会报错crash。...就是上面item的id要和navigation_main.xml中fragment的id相同,否则点击菜单不会切换fragment的。 配置完上面这些信息之后,怎么将他们绑定起来使用呢?...总结 4.1 流程 考虑到我们开始如果直接从setupWithNavController 入口进行分析的话,可能不太容易找到怎么创建的graph布局中的fragment,以及NavHostFragment

    2.2K20

    1. Android_Jetpack组件---Naviagtion源码解析

    背景 之前已经翻译过了Google官方的CodeLabs上面的教程,教程很详细,代码在Github上也可以找到,本篇文章旨在自己的APP上使用效果及演示Demo,来具体的使用Navigation。...基本使用 虽然在之前的文章中已经很详细的介绍了Navigation,但是这里也简单的叙述一下我在项目中的具体使用: 2.1 Navigation+DrawerLayout+ToolBar 我们可以通过使用...startDestination是APP默认启动的页面,这里面必须要指定,否则会报错crash。...就是上面item的id要和navigation_main.xml中fragment的id相同,否则点击菜单不会切换fragment的。 配置完上面这些信息之后,怎么将他们绑定起来使用呢?...总结 4.1 流程 考虑到我们开始如果直接从setupWithNavController 入口进行分析的话,可能不太容易找到怎么创建的graph布局中的fragment,以及NavHostFragment

    2.2K10

    安卓Navigation系列——进阶篇

    [k8q1t7a9gl.png] 下面从源码角度分析为什么会这样。...原因 从NavHostFragment入手,首先看到它的oncreate方法中, @CallSuper @Override public void onCreate(@Nullable Bundle savedInstanceState...,mGraphId就是在布局文件中定义NavHostFragment时,通过app:navGraph属性指定的导航资源文件, 跟进setGraph()方法, public void setGraph...通过getNavInflater().inflate方法创建出一个NavGraph对象,传到第三个重载的方法中,并赋值给成员变量mGraph,最后在onGraphCreated方法中将第一个页面显示出来...那么我们是不能在布局文件中通过app:navGraph属性指定自定义的导航资源文件了,只能在布局文件中去掉app:navGraph这个属性,然后在添加FixFragmentNavigator的同时,通过代码将导航资源文件设置进去

    3.2K30

    在功能模块中使用导航 | MAD Skills

    概述 在 上一篇文章 中,您已经学会了如何在多模块工程中使用导航 (Navigation)。在本文中,我们将更进一步,将咖啡模块转换成功能模块 (Feature Module)。...功能模块 由于我在 上一篇文章 中已经将 DonutTracker 应用进行了模块化,我会从将现有的咖啡模块转换成功能模块开始。...我从依赖列表中移除了咖啡模块并添加了 navigation-dynamic-features 依赖: implementation "androidx.navigation:navigation-dynamic-features-fragment...为此,在 Run/Debug Configurations 弹窗中,我从待部署列表中取消勾选了 donuttracker.coffee。...在本系列中,我们再次使用了 Chet 的 DonutTracker 应用 并添加了咖啡记录功能。因为...我喜欢咖啡。 新功能带来了新责任。

    55610

    Android Navigation的四大要点你都知道吗?

    ,有这一篇就够了 WorkManager从入门到实践,有这一篇就够了 对于Navigation的使用,我将其归纳于以下四点: Navigation的基本配置 Navigation的跳转与数据传递 Navigation...它有一个属性startDestination用来定义导航栈的根入口fragment fragment: 顾名思义fragment页面。...Navigation为我们提供了两个配置参数: defaultNavHost与navGraph,所以在Activity的xml中需要如下配置 1中如何使用这些配置的参数,首先是在ShopListFragment中 1holder.item.setOnClickListener(Navigation.createNavigateOnClickListener...5 动画 在action中不仅可以配置跳转的destination,还可以定义对应页面的转场动画,使用非 1<?xml version="1.0" encoding="utf-8"?

    1.7K30

    Jetpack:新一代导航管理Navigation

    > 用于暂时占位以便后面可以替换为Fragment和Activity 添加完页面后,我们还需要添加页面之间的导航,可以手动添加action标签,当然也可以通过拖拽来实现,如下: 这样我们就添加了一个从FirstFragment...添加NavHost 下一步我们需要向Activity中添加导航宿主,导航宿主是一个空页面,必须实现NavHost接口,我们使用Navigation提供的默认NavHost————NavHostFragment...app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:navGraph...="@navigation/nav_graph" /> 在Activity的视图中添加一个fragment标签,android:name设置为实现类,即NavHostFragment;app:navGraph...可以看到使用Navigation代码精简了很多,只需要一行代码执行一个函数即可。

    90520

    compose--附带效应、传统项目集成、导航

    中是由State状态发生改变来使得可组函数发生重组,状态的改变应该是在可组合函数作用域中,但有时我们需要它发生在别的作用域,如定时弹出一个消息,这就需要附带效应出场了,compose定义了一系列附带效应...navController来导航到不同的可组合项,下面是官方给出的示例的几种方式: 在导航到“friendslist”并加到返回堆栈中 navController.navigate("friendslist...") 在导航到“friendslist”之前,将所有内容从后堆栈中弹出到“home”(不包含home) navController.navigate("friendslist") { popUpTo...("home") } 在导航到“friendslist”之前,从堆栈中弹出所有内容,包括“home” navController.navigate("friendslist") { popUpTo...("home") { inclusive = true } } 只有当我们还不在“search”时,才能导航到“search”目标地,避免在后堆栈的顶部有多个副本 navController.navigate

    2.3K40
    领券