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

【Jetpack】Navigation 导航组件 ② ( Navigation 核心要点说明 | 创建 Navigation Graph | 创建 NavHostFragment | 完整代码示例 )

Navigation 依赖 , 不同开发语言导入不同依赖 : 使用 Java 语言 开发 Navigation 导航 , 导入如下依赖 : dependencies { implementation...调用 findNavController 函数 , 获取 NavController , 然后通过该 NavController 变量进行导航 ; fragmentContainerView 组件...管理 操作通过 NavController 完成 ; // fragmentContainerView 组件 管理 操作通过 NavController 完成 // 对应就是...函数 , 获取 NavController , 然后通过该 NavController 变量进行导航 ; fragmentContainerView 组件 管理 操作通过 NavController...完成 ; // fragmentContainerView 组件 管理 操作通过 NavController 完成 // 对应就是 navController 实例变量

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

JetPack指路明灯—Navigation

创建Activity并引入NavHostFragment 在Activityxml布局中,通过FragmentContainerView来创建这些Fragment容器,代码如下所示。 ?...容器 FragmentContainerView内部会通过反射方式,初始化名为name所指定class——NavHostFragment,它就是所有需要管理FragmentContainer。...Navigation.findNavController(it).navigate(R.id.action_loginFragment_to_registerFragment) 不过要注意是,使用action...Navigation.findNavController(it).navigateUp() 当我们从A路由到B,B路由到C后,通过上面的代码,使用navigateUp返回,则路由返回路径为C到B,B到...defaultNavHost="true"这个属性是我们最早在FragmentContainerView中设置,通过这个属性,可以让当前NavHostFragment拦截系统返回键,也就是说,只要当前

97220

JetPack--Navigation

目前UI一般使用Activity嵌套使用Fragment方式,但是Fragment管理是比较繁琐,需要手动通过FragmentManager和FragmentTransaction来管理Fragment...,以及页面间关系 2.NavHostFragment:一个特殊Fragment,可以将它看作是其他Fragment容器,Navigation Graph中Fragment正是使用NavHostFragment...进行展示 3.NavController:用于在代码中完成Navigation Graph中具体页面切换工作 当想要切换Fragment时,使用NavController对象,指定跳转Navigation...Fragment,再建立连接关系: 在Activity布局文件中使用NavHostFragment: xml如下,使用是fragment标签: <?...中action navController.navigate(R.id.action_homeFragment_to_detailFragment, bundle); 还可以使用插件方式: 在主工程

57710

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

顶部应用栏 / 抽屉式导航栏 / 底部导航栏中 界面导航 ; 本篇博客中介绍一种使用场景 : 使用 AppBar 中的菜单选项控制 Navigation 界面跳转 ; 在 Activity 中 ,...NavigationUI 类 , 统一管理 Fragment 页面切换相关 UI 改变 ; 二、NavigationUI 类使用流程 本章节介绍使用 AppBar 中的菜单选项控制 Navigation...获取 NavController navController = Navigation.findNavController(this, R.id.fragmentContainerView..., navController) 代码含义是 : 优先使用 NavigationUI 进行导航 , 如果跳转失败 , 再使用传统方式执行默认动作 , 代码为 super.onOptionsItemSelected...获取 NavController navController = Navigation.findNavController(this, R.id.fragmentContainerView

71340

【错误记录】Navigation 导航组件报错 ( Activity xxActivity@3f does not have a NavController set on 2131xx )

一、报错信息 在 Android 中 , 使用 Navigation 导航组件 , 运行应用时报错 , 报错信息如下 : FATAL EXCEPTION: main Process: kim.hsl.nav...kim.hsl.nav.MainActivity@3f810b3 does not have a NavController set on 2131231211 at androidx.navigation.Navigation.findNavController...layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <androidx.fragment.app.FragmentContainerView...; 这里有一个大坑 , 就是 Android Studio 自动生成代码 , 在 布局文件 Design 模式下 , 将 Container 下 NavHostFragment 组件拖入到布局文件中..., 生成代码是错误 ; 生成了如下代码 : 如果使用这个代码 , 是无法获取到 NavController ; <androidx.fragment.app.FragmentContainerView

43210

【约束布局】使用 Design 模式编辑 ConstraintLayout 约束布局 ( 添加 Guideline 引导线 | 添加 FragmentContainerView )

文章目录 一、使用 Design 模式编辑 ConstraintLayout 约束布局 1、添加 Guideline 引导线 2、添加 Fragment1 3、添加 Fragment2 一、使用 Design...Guidelines 按钮 , 在弹出 下拉菜单中 , 选择 Horizontal Guideline 水平引导线 , 此时在下方界面中 , 就会出现一条 Guideline 引导线 , 默认显示单位是...像素 , 双击左侧三角按钮 , 就可以切换 像素值 / 百分比 显示 , 百分比显示效果如下 : 将其拖动到 50% 处 , 该 Guideline 引导线作为 Fragment 分割线...<androidx.fragment.app.FragmentContainerView android:id="@+id/fragmentContainerView1"...0dp , 也就是默认 match_parent 充满布局 ; 生成代码如下 : <androidx.fragment.app.FragmentContainerView

1K10

【Jetpack】Navigation 导航组件 ④ ( Fragment 跳转中使用 safe args 安全传递参数 )

name = Tom , age = 18 2、使用 Bundle 传递数据安全性差 使用 传统方式 , 在 Fragment 之间 传递 数据 , 类型很不安全 , 设置 传递数据时 , 需要设置..., 这就导致了 数据传递 不安全 问题 , 如果出现问题 , 导致错误很难排查 ; 二、页面跳转间传统数据传递方式 ---- 1、导入插件依赖 安全参数传递需要使用到 androidx.navigation...Gralde 编译过程中使用插件 ; 下面的章节中 , 可以查看该 settings.gradle 配置完整源码 ; 配置如下 : buildscript { repositories...androidx.navigation.safeargs 插件 , 该依赖使用新方式配置无法成功下载 , 这里直接使用配置方式 ; dependencyResolutionManagement 中配置是依赖库下载地址...组件 管理 操作通过 NavController 完成 // 对应就是 navController 实例变量 val navController = findNavController

43720

Jetpack:新一代导航管理Navigation

前言 不知道小伙伴们是否注意到,用AS创建一个默认新项目后,MainActivity已经有了很大不同,最大区别就是新增加了两个Fragment,同时我们注意到这两个Fragment之间跳转时候并没有使用之前...添加NavHost 下一步我们需要向Activity中添加导航宿主,导航宿主是一个空页面,必须实现NavHost接口,我们使用Navigation提供默认NavHost————NavHostFragment...可以看到使用Navigation代码精简了很多,只需要一行代码执行一个函数即可。...= NavHostFragment.findNavController(this) 实际上是NavHostFragment一个静态函数findNavController: @NonNull...注意这里findNavController是Activity扩展函数,它最终一样会调用Navigation对应函数,所以与Fragment流程是一样

86520

【详解】Android Jetpack 新组件之Navigation用法和源码结构分析

>>>> Navigation to a destination 要导航到目的地,您可以使用下列四种方法之一: Navigation.findNavController(Activity, @IdRes...>>>> 传递数据 您可以通过两种方式在目标之间传递数据:使用Bundle对象或使用safeargs Gradle插件以类型安全方式传递数据。...安全参数建立在Bundle方法基础上,但需要一些额外代码来换取更多类型安全。如果您使用Gradle,则可以使用安全参数插件。...使用场景,多分支深度跳转可以考虑使用,如图: ?...NavController实例,并且给根布局设置一个tag,所以在每次findNavController时候都会通过这个tag取唯一实例,如果取不到会循环从父布局在去找。

2.2K40

【Jetpack】LiveData 架构组件 ( LiveData 简介 | LiveData 使用方法 | ViewModel + LiveData 示例 )

传统开发方式 , 可以使用 线程通信 , Handler 或者 广播 等形式 , 在子线程中通知主线程更新 UI ; 使用 LiveData 后 , 将数据定义在 LiveData 中 , 然后在...代码 自定义 ViewModel 子类继承 ViewModel , 在 ViewModel 中 , 定义 LiveData 类型数据 , 此处选择使用 MutableLiveData 数据类型..., 此处选择使用 MutableLiveData 数据类型 , 维护一个 Int 类型数据 , 当该 Int 值发生改变时 , 会触发 LiveData 设置 Observer 监听器...android:id="@+id/fragmentContainerView1" android:name="kim.hsl.livedatademo.Fragment1...android:id="@+id/fragmentContainerView2" android:name="kim.hsl.livedatademo.Fragment2

1.3K20

Andrroid Jetpack之Navigation

打开nav_graph.xml有一个Design和Text选项卡,跟我们布局文件很相似 4、使用Navigation 新建两个fragment:FragmentA、FragmentB对应布局为fragment_a.xml...,调用NavigationfindNavController方法找到NavController,findNavController还有其他参数方法大家可以自己试试,然后调用navigate方法,参数就是...xmlfragmentaction里添加argument标签,然后使用生成对应Agrs或者Directions来传递参数,需要在build.gradle中添加apply plugin: 'androidx.navigation.safeargs...: //使用FragmentBArgs val bundle = FragmentBArgs.Builder().setText("Hello World").build().toBundle() Navigation.findNavController...深层链接 deep-link 使用 deep-link可以创建深层链接,类似activity自定义URL使用Scheme方式来跳转,可以直接跳转到指定Fragment <?

30720
领券