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

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

>>>> Navigation to a destination 要导航到目的地,您可以使用下列四种方法之一: Navigation.findNavController(Activity, @IdRes...(view).navigate(R.id.confirmationAction, bundle); 在您的接收目标的代码中,使用getArguments()方法获取 TextView tv = view.findViewById...arguments.getString("myarg") 注意: 根据官方文档说明,为了保证导航的正确使用,我们需要在目标的Activity中重写onSupportNavigateUp,以确保导航器能够正确的回退栈...实例,并且给根布局设置一个tag,所以在每次findNavController的时候都会通过这个tag取唯一的实例,如果取不到会循环从父布局在去找。...Navigator是一个抽象类,提供navigate、popBackStack抽象方法,指定导航和回退导航,而ActivityNavigator和FragmentNavigator才是实现类,最终的导航行为都是他们负责实现

2.3K40

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

使用 Navigation 组件 , 必须导入 Navigation 依赖 , 不同的开发语言导入不同的依赖 : 使用 Java 语言 开发 Navigation 导航 , 导入如下依赖 : dependencies..., 这里将 FragmentA 和 FragmentB 都纳入到 Navigation 导航管理中 ; 创建后可以通过拖动鼠标 , 设置 Navigation Graph 中两个 Fragment...调用上面的两个跳转 , 分别实现两个 Fragment 之间的跳转 ; 5、创建 NavHostFragment NavHostFragment 设置在 Activity 的布局文件中 , 一般是为...在 Activity 中通过 调用 findNavController 函数 , 获取 NavController , 然后通过该 NavController 变量进行导航 ; fragmentContainerView...NavController 并进行导航 在 Activity 中通过 调用 findNavController 函数 , 获取 NavController , 然后通过该 NavController

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

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

    对应的 action 的导航路线走 navController.navigate(R.id.action_fragmentA_to_fragmentB, args) 最后 , 在跳转后的界面中 , 调用...name = Tom , age = 18 2、使用 Bundle 传递数据安全性差 使用 传统的方式 , 在 Fragment 之间 传递 数据 , 类型很不安全 , 设置 传递的数据时 , 需要设置...("NAME", "Tom") this.putInt("AGE", 18) } 上面的代码中 , 向 Bundle 中设置了如下两个数据 : 设置了 String 类型的数据 , 名称是 “NAME..., 使用传统的方式配置 Gralde 编译过程中使用到的插件 ; 下面的章节中 , 可以查看该 settings.gradle 配置的完整源码 ; 配置如下 : buildscript { repositories...androidx.navigation.safeargs 插件 , 该依赖使用新方式配置无法成功下载 , 这里直接使用老的配置方式 ; dependencyResolutionManagement 中配置的是依赖库的下载地址

    55820

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

    顶部应用栏 / 抽屉式导航栏 / 底部导航栏中 的界面导航 ; 本篇博客中介绍一种使用场景 : 使用 AppBar 中的菜单选项控制 Navigation 界面跳转 ; 在 Activity 中 ,...使用 Navigation 组件 切换 Fragment 界面时 , 除了进行界面切换之外 , 不同的界面对应的顶部 标题栏 AppBar 需要进行相应的改变 ; Navigation 组件中 , 提供了...NavigationUI 导航 只显示菜单是不行的 , 还需要设置菜单的行为 , 重写了该方法 , 菜单选项才能生效 , NavigationUI.onNavDestinationSelected(item..., navController) 代码的含义是 : 优先使用 NavigationUI 进行导航 , 如果跳转失败 , 再使用传统的方式执行默认动作 , 代码为 super.onOptionsItemSelected...> b、FragmentB 界面的 Kotlin 源码和布局文件 在该界面中 , 设置了 隐藏 AppBar 中的 菜单按钮 的功能 , 跳转到 FragmentB 之后 , 右上角 就不再显示菜单按钮

    95540

    【Jetpack】Navigation 导航组件 ① ( Navigation 引入 | Navigation 特点 | Navigation 重要组件 | Navigation 使用流程 )

    设置 App Bar 标题:使用 setTitle() 方法设置 App Bar 的标题。 设置 App Bar Logo:使用 setLogo() 方法设置 App Bar 的 Logo。...二、Navigation 特点 Navigation 提供了 可视化的 页面导航图 , 与 iOS 开发中的 Xcode 环境中的 StoryBoard 类似 ; 在 布局文件 的 Design 模式下..., 完成 Fragment 之间的导航 ; 如果要 为 Fragment 跳转设置动画 , 可以直接在 Navigation 图形化界面中选中某个跳转 , 然后直接在 布局文件的 Design 图形化界面中...中定义的 Fragment 页面 需要通过 NavHostFragment 进行展示 ; NavController 组件 : 该组件是 NavHostFragment 中的管理对象 , 用于管理应用中的导航操作...: 使用 NavController 组件 切换 Fragment , 设置 要跳转的 定义在 Navigation Graph 中定义的 Fragment ; NavController 组件 会将

    92340

    Android经典面试题之Kotlin中如何隐藏DialogFragment和Dialog的导航栏

    DialogFragment隐藏导航栏 在 Android 中,使用 DialogFragment 显示对话框时,如果您希望隐藏系统导航栏(如状态栏和导航键),可以通过设置相关的系统 UI 标志来实现。...以下是一个完整的例子,展示了如何在 DialogFragment 中隐藏系统导航栏(使用 Kotlin): import android.os.Bundle import android.view.View...onViewCreated 方法中设置系统 UI 的可见性标志,可以实现隐藏系统导航栏的效果。...Dialog中隐藏导航栏 在 Android 中,如果想在 Dialog 中隐藏系统导航栏(包括状态栏和底部的导航键),可以通过设置窗口属性来实现。...在创建 Dialog 时,可以使用 Window 类提供的一些标志来隐藏导航栏。

    19310

    「docker实战篇」python的docker爬虫技术-appium+python实战(18)

    流程代码 1.点击跳过导航页面,进入登录页面 2.输入用户名和密码,点击登录 3.进入页面点击同意,点击研迅 4.模拟手势,上移 准备工作 安装【考研帮】 ?...2.设置-应用-点击【考研帮】-清除数据 ? 启动【考研帮】 ? 启动直接adb中的uiautomatorviewer.bat 记得看看下载源码包里面的增强版 ?...: x = driver.get_window_size()['width'] y = driver.get_window_size()['height'] return(x,y)#导航点击跳过...2.python在运行过程中如果进行uiautomatorviewer加载会报错 3.python在使用的过程中需要先引入 from appium import webdriver from selenium.webdriver.support.ui...get_size() x1 = int(l[0]0.5) y1 = int(l[1]0.75) y2 = int(l[1]*0.25) driver.swipe(x1,y1,x1,y2) PS:最后实现了如何从登陆到点击研迅

    60510

    Android开发之自定义组件和接口回调

    而Android开发中的自定义控件也是继承自View, 但是今天我们的自定义控件是继承自FrameLayout, 在此基础上我们自定义一些东西。...因为FrameLayout, LinearLayout等布局方式都是继承自ViewGroup的,而ViewGroup则继承自View, 所以在自定义控件时,继承自FrameLayout等布局方式肯定是可以的...实现效果分析 接下来我们要自定义一个导航栏,而这个导航栏是模仿iOS系统中的NavigationBar。因为Android开发中没有这个控件,所以我们需要自定义这个控件供开发者使用。...这两者上面放了一个透明的Button, 用来实现返回操作。中间的Title(TextView) 在FrameLayout中设置成居中显示即可。...经过上面的过程,我们自定控件以及实现好了,接下来就是如何使用了。

    1.7K100

    Android开发笔记(一百六十三)高仿京东的沉浸式状态栏

    前面的文章介绍了如何实现广告轮播的Banner效果,本想可以告一段落。然而某天产品经理心血来潮,拿着苹果手机,要求像iOS那样把广告图顶到状态栏这儿。...可见这真不是一个省油的灯,许多人用的App尚且未能解决悬浮状态栏的兼容性问题。...,例如调用Window对象的setStatusBarColor方法即可设置顶部状态栏的背景色,调用Window对象的setNavigationBarColor方法即可设置底部导航栏的背景色。...View decorView = window.getDecorView(); // 两个标志位要结合使用,表示让应用的主体内容占用系统状态栏的空间 // 第三个标志位可让底部导航栏变透明...Build.VERSION_CODES.LOLLIPOP) {                 activity.getWindow().setStatusBarColor(color);                 // 底部导航栏颜色也可以由系统设置

    1.4K20

    我们经常用的Loading动画居然还有这种姿势

    一般在需要用户等待的场景,显示一个Loading动画可以让用户知道App正在加载数据,而不是程序卡死,从而给用户较好的使用体验。...font> 在BaseActivity/BaseFragment的子类中可通过上一步的封装比较方便地使用加载状态显示功能 这种封装的好处是通过封装动态地创建LoadingView并添加到指定的父容器中,...时,动态新建一个FrameLayout布局 将原View从ParentView中移除,并用它的LayoutParams将FrameLayout添加到ParentView中替代原View在ParentView...时,由于View尚未添加到任何容器中,并无getParent()返回null,此时需要用动态生成的FrameLayout代替原View作为方法的返回值返回 上代码更容易理解: public Holder...,将加载失败点击重试的点击功能放在Adapter.getView中实现 与Android系统中的Adapter不同的是,我们的Adapter是全局使用的,而失败重试所需执行逻辑每个页面都不一样 因为Holder

    76830

    我们经常用的Loading动画居然还有这种姿势

    一般在需要用户等待的场景,显示一个Loading动画可以让用户知道App正在加载数据,而不是程序卡死,从而给用户较好的使用体验。.../BaseFragment的子类中可通过上一步的封装比较方便地使用加载状态显示功能 这种封装的好处是通过封装动态地创建LoadingView并添加到指定的父容器中,让具体页面无需关注LoadingView...,动态新建一个FrameLayout布局 将原View从ParentView中移除,并用它的LayoutParams将FrameLayout添加到ParentView中替代原View在ParentView...时,由于View尚未添加到任何容器中,并无getParent()返回null,此时需要用动态生成的FrameLayout代替原View作为方法的返回值返回 上代码更容易理解: public Holder...,将加载失败点击重试的点击功能放在Adapter.getView中实现 与Android系统中的Adapter不同的是,我们的Adapter是全局使用的,而失败重试所需执行逻辑每个页面都不一样 因为Holder

    2K40

    DSL In Action

    ,而调用这个方法的结果就是把 textView加入到此ViewGroup里面,比如说: val frameLayout = findViewByIdFrameLayout>(R.id.fl_container.../ViewGroup的地方就可以使用Anko,而Anko的作用也就是简化初始化View + AddView的流程。...比如说我已经用XML写好了页面的布局,然后我们需要根据代码在其中一个FrameLayout中动态添加一些东西。我们就可以拿到这个FrameLayout的引用,然后就可以用anko大展拳脚了。...比如说在布局里面加一个if就可以来操作一个控件的布局与否,而不是在findView之后控制Visibility,可以用Kotlin的闭包来封装一个View的初始化操作什么的,重复的操作就可以封装起来,再比如...当然Anko因为避免了反射,提高了大量的性能。 DSL和XML并不是冲突的,DSL用于解决布局中细碎和动态的部分,而XML用于单页布局,复杂布局。

    1.1K20

    Android 实现视屏播放器、边播边缓存功能、外加铲屎(IJKPlayer)

    这里我们主要针对视频的大小和旋转角度设置TextureView的大小,详细就不多说了(不是懒),挑其中一类讲讲,因为主要也是这个。...这里有一个是TextureView的动态添加,动态添加的好处是你可以在不停止视频的情况下载不同的逻辑播放器中切换视频播放,比如列表全屏。...然后新创建一个GSYVideoPlayer2,只有把这个G2添加到window下FrameLayout。 设置它的播放状态和当前列表这个逻辑播放器一致。...} //设置全屏逻辑播放器的状态,动态及添加播放view gsyVideoPlayer.setUp(mUrl, mCache, mObjects); gsyVideoPlayer.setStateAndUi...接入简单,使用简单,你可以趾高气扬的和产品说,这个so easy了。

    3K90
    领券