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

如何使用<FrameLayout />而不是<FrameLayout />中的findNavController动态设置导航主机?

在使用<FrameLayout />而不是<NavHostFragment />中的findNavController动态设置导航主机时,可以按照以下步骤进行操作:

  1. 首先,确保你的项目中已经引入了Navigation组件库。可以在项目的build.gradle文件中添加以下依赖:
代码语言:txt
复制
implementation "androidx.navigation:navigation-fragment-ktx:2.3.5"
implementation "androidx.navigation:navigation-ui-ktx:2.3.5"
  1. 在布局文件中,使用<FrameLayout />作为容器来承载导航目的地的Fragment。例如:
代码语言:txt
复制
<FrameLayout
    android:id="@+id/nav_host_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  1. 在相关的Activity中,获取对应的<FrameLayout />实例,并使用Navigation组件的NavHostFragment来设置导航主机。例如:
代码语言:txt
复制
val navHostContainer = findViewById<FrameLayout>(R.id.nav_host_container)
val navHostFragment = NavHostFragment.create(R.navigation.nav_graph)
supportFragmentManager.beginTransaction()
    .replace(navHostContainer.id, navHostFragment)
    .setPrimaryNavigationFragment(navHostFragment)
    .commit()

这样就成功地将<FrameLayout />设置为导航主机,可以通过Navigation组件的其他API来进行导航操作。

需要注意的是,上述代码中的R.navigation.nav_graph是一个示例,代表你的导航图的资源ID。你需要根据自己的项目需求来替换为实际的导航图资源ID。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(Mobile):https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云游戏多媒体引擎(GME):https://cloud.tencent.com/product/gme
  • 腾讯云音视频处理(VOD):https://cloud.tencent.com/product/vod
  • 腾讯云网络安全(NSA):https://cloud.tencent.com/product/nsa
  • 腾讯云CDN加速(CDN):https://cloud.tencent.com/product/cdn
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【详解】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.2K40

【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

40020

【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 配置是依赖库下载地址

41320

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

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

66240

【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 组件 会将

39240

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

流程代码 1.点击跳过导航页面,进入登录页面 2.输入用户名和密码,点击登录 3.进入页面点击同意,点击研迅 4.模拟手势,上移 准备工作 安装【考研帮】 ?...2.设置-应用-点击【考研帮】-清除数据 ? 启动【考研帮】 ? 启动直接adbuiautomatorviewer.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:最后实现了如何从登陆到点击研迅

58410

android侧滑菜单控件DrawerLayout使用方法详解

drawerLayout分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏(drawerLayout自身特性),主内容区内容可以随着菜单点击变化(这需要使用者自己实现)。...使用步骤: 创建一个DrawerLayout 为了添加导航抽屉,你需要在你布局界面声明一个DrawerLayout对象作为布局根节点。...同时在DrawerLayout内部添加两个view: 添加一个View,它包含应用主内容(当抽屉隐藏时你主要布局); 添加另一个View它包含了导航抽屉; 如下面例子所示:该布局使用了DrawerLayout...主内容View被设置成匹配父View宽和高,因为当导航抽屉隐藏时候它要填充整个UI。...为了保证用户无论怎样都能看到主内容一部分,导航抽屉宽度不能超过320dp 初始化Drawer List 在你Activity,要做第一件事是初始化导航抽屉列表项。

2.2K10

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

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

1.6K100

我们经常用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

75330

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

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

1.3K20

我们经常用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

1.9K40

Anroid Wear OS 手表应用开发 - UI

Wear UI 智能手表相对手机来说,由于使用场景不同,且屏幕较小,所以应用设计、交互和手机是有些区别的。相对来说,布局会更简洁,更多地使用滑动手势进行操作。...导航栏 WearableNavigationDrawerView 就是用来解决这个问题,我们先看看它效果: 从手表顶部向下滑,会出现一个导航栏,显示当前页面的图标和标题。...下面来看看它用法,我们修改布局文件,使用 WearableDrawerLayout 作为根布局,添加导航栏控件: <android.support.wear.widget.drawer.WearableNavigationDrawerView...通过给操作栏设置 menu 文件,它会以列表形式展示可操作项,布局这么写: <android.support.wear.widget.drawer.WearableActionDrawerView...这样我们就可以在 layout_bottom_drawer 设置自己想要布局了,其他用法都和上面是一样

2.5K30

DSL In Action

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

1K20

解决android 显示内容被底部导航栏遮挡问题

描述: 由于产品需求,要求含有EditText界面全屏显示,最好解决方式是使用AndroidBug5497Workaround.assistActivity(this) 方式来解决,但是华为和魅族手机系统自带有底部导航栏...解决方案:在values-21style.xml添加android:windowDrawsSystemBarBackgrounds”并将值设置为false,方式如下 在style引用主题里面加入android...:windowDrawsSystemBarBackgrounds”并将值设置为false,会自动提醒点击alt+Enter会新建values-21文件夹并生成styles.xml文件。...”并将值设置为false即可解决。...(r.bottom - r.top)+statusBarHeight; } return (r.bottom - r.top); } } 以上这篇解决android 显示内容被底部导航栏遮挡问题就是小编分享给大家全部内容了

4.4K10
领券