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

Android导航架构组件-获取当前可见片段

Android导航架构组件-获取当前可见片段

基础概念

Android导航架构组件(Navigation Architecture Components)是Android Jetpack的一部分,旨在简化应用程序的导航逻辑。它提供了一种统一的方式来处理应用程序中的页面跳转和状态管理。

相关优势

  1. 简化导航逻辑:通过单一的导航图(navigation graph)管理所有页面跳转,减少代码复杂性。
  2. 类型安全:使用导航组件可以避免手动处理Intent和FragmentTransaction,减少类型错误。
  3. 支持深层链接:可以轻松实现从外部URL直接跳转到应用内的特定页面。
  4. 集成ViewModel:与ViewModel结合使用,可以更好地管理页面状态和数据。

类型

主要类型包括:

  1. Navigation Graph:定义应用程序的所有页面及其跳转关系。
  2. NavHostFragment:用于托管导航图中的Fragment。
  3. NavController:用于执行导航操作。
  4. Action:定义导航图中的跳转路径。

应用场景

适用于需要复杂导航逻辑的应用,如多层级页面跳转、深层链接支持等。

获取当前可见片段的方法

在Android导航架构组件中,获取当前可见片段可以通过以下步骤实现:

  1. 获取NavController
  2. 获取NavController
  3. 获取当前目的地
  4. 获取当前目的地
  5. 获取当前可见的Fragment
  6. 获取当前可见的Fragment

示例代码

代码语言:txt
复制
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
        val navController = navHostFragment.navController

        // 获取当前目的地
        val currentDestination = navController.currentDestination
        Log.d("Navigation", "Current Destination: ${currentDestination?.id}")

        // 获取当前可见的Fragment
        val currentFragment = navHostFragment.childFragmentManager.fragments.firstOrNull { it.isVisible }
        Log.d("Navigation", "Current Fragment: ${currentFragment?.javaClass.simpleName}")
    }
}

参考链接

通过以上步骤和示例代码,你可以轻松获取Android导航架构组件中的当前可见片段。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

响应Android系统的事件

fontScale:当前用户设置的字体的缩放因子。 hardKeyboardHidden:判断硬键盘是否可见,有两个可选值: HARDKEYBOARDHIDDEN_NO,值为十六进制的0。...keyboardHidden:该属性返回一个boolean值用于标识当前键盘是否可用。该属性不仅会判断系统的硬件键盘,也会判断系统的软键盘(位于屏幕)。 locale:获取用户当前的语言环境。...mcc:获取移动信号的国家码。 mnc:获取移动信号的网络码。 ps:国家代码和网络代码共同确定当前手机网络运营商。 navigation:判断系统上方向导航设备的类型。...NAVIGATION_WHEEL:滚轮导航。 orientation:获取系统屏幕的方向。该属性的返回值: ORIENTATION_LANDSCAPE:横向屏幕。...super.onCreate(savedInstanceState); setContentView(R.layout.system_event_layout); // 获取界面组件

1.4K90

Android交流会-碎片Fragment,闲聊单位与尺寸

标题图 女孩:又周末了哦~ 男孩:那么今日来开个交流会,我们也学一学人家高大尚的大会,自己开一个,广州站,Android开发攻城狮交流会~ 1.Fragment概要: Android从3.0开始引入了Fragment...): 表示活动已被创建完成了,这里是activity创建成功; onStart(): 片段对用户可见; onResume(): 片段与用户开始交互; onPause(): 片段与用户不再交互;...onStop(): 片段不再对用户可见; onDestroyView(): 销毁与其View相关资源; onDestroy(): 销毁一切片段; onDetach(): 片段与其活动不再相关联。...MyFragment myFragment = getFragmentManager().findFragmentById(R.id.fragment); 接着通过调用getActivity()方法来获取当前片段和相关联的活动实例...男孩:px在Android中为最小元素单元,px为像素,pt是磅数的意思,在Android通常作为字体的单位来用~ 女孩:那dp和sp呢?

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

    DialogFragment隐藏导航栏 在 Android 中,使用 DialogFragment 显示对话框时,如果您希望隐藏系统导航栏(如状态栏和导航键),可以通过设置相关的系统 UI 标志来实现。...onViewCreated: 在视图创建后设置系统 UI 可见性标志,隐藏导航栏和状态栏。 onStart: 设置对话框窗口的布局参数,使其覆盖整个屏幕。...-- Your layout content goes here --> 使用 DialogFragment 要显示这个 DialogFragment,可以在活动或其他片段中调用以下代码...Dialog中隐藏导航栏 在 Android 中,如果想在 Dialog 中隐藏系统导航栏(包括状态栏和底部的导航键),可以通过设置窗口属性来实现。...如果需要在更多场景下多次使用该样式,可以进一步将其封装或抽取为一个通用组件

    13910

    安卓UI

    - 应用组件 应用组件Android 应用的基本构建块。每个组件都是一个入口点,系统或用户可通过该入口点进入您的应用。有些组件会依赖于其他组件。...共有四种不同的应用组件类型: • Activity • 服务 • 广播接收器 • 内容提供程序 - 清单文件 在 Android 系统启动应用组件之前,系统必须通过读取应用的清单文件 (AndroidManifest.xml...然而,ViewGroup 是不可见容器,用于定义 View 和其他 ViewGroup 对象的布局结构,如图 所示。...在 Activity 之间导航 在应用的生命周期中,应用很可能会多次进入和退出 Activity。例如,用户可以点按设备的返回按钮,或者 Activity 可能需要启动不同的 Activity。...() 以获取 FragmentManager。

    1.4K30

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

    作 者 简 介 邱俊杰——Android高级工程师 5年以上开发经验,对架构设计以及性能调优有着深刻认知,负责京东商城商品详情的开发,热衷于学习和创新。...这次的Android Jetpack推出了五个新组件,它们分别是:Navigation(导航组件)、Paging(分页组件)、WorkManager(处理类似后台任务组件)、Slices(切片)、Android...Deeplink的支持,绕过activity直接跳到fragment 传递参数更安全 >>>> Navigation——导航组件 a、基于Android Studio 3.2 Canary 14(https...view.findViewById(R.id.textViewAmount); tv.setText(getArguments().getString("amount")); 2、以类型安全的方式在目标之间传递数据 导航架构组件有一个名为...>>>> 结语 至此Navigation的用法和源码结构都介绍分析完了,他的功能还是很强大的,并且有着安全性和灵活性,以及可视化、人性化的操作,deeplink跳转,同时还支持所有架构组件例如Lifecycle

    2.2K40

    Android Studio 知识储备 之 ✨-基础知识学习历程

    文字表述: 答:是将功能定义与功能分开的一种手段,一种解耦合的设计思想;在Java中回调是通过接口来实现的, 作为一种系统架构,必须要有自己的运行环境,且需要为用户提供实现接口;实现依赖于客户,这样就可以...2.Android回调的事件处理机制详解: 在Android中基于回调的事件处理机制使用场景有两个: 1)自定义view 常见View组件的回调 android为GUI组件提供了一些事件处理的回调方法...:获取当前关联额键盘类型:该属性的返回值:KEYBOARD_12KEY(只有12个键的小键盘)、KEYBOARD_NOKEYS、KEYBOARD_QWERTY(普通键盘) keyboardHidden...locale:获取用户当前的语言环境 mcc:获取移动信号的国家码 mnc:获取移动信号的网络码 ps:国家代码和网络代码共同确定当前手机网络运营商 navigation:判断系统上方向导航设备的类型...该属性的返回值:NAVIGATION_NONAV(无导航)、 NAVIGATION_DPAD(DPAD导航)NAVIGATION_TRACKBALL(轨迹球导航)、NAVIGATION_WHEEL(滚轮导航

    64730

    Pinterest:Android系统上的视频管理

    很快我们发现其实需要应对的技术挑战有很多,例如: 管理当前所有可用视频的播放状态 了解视频在屏幕上的可见率 为我们的开发人员提供易于使用的视频组件 随着工作的进行,我们逐渐调整视频架构来满足这些需求,下面我们将在最新的视频模块中深入探讨如何应对这些挑战...视频管理 从更高的层次上来看,我们需要构建一个组件,这个组件需要感知屏幕上所有可用的视频实例(即视图)以及其相关的surfaces(即视频片段)。...为了跟踪这些关键的生命周期事件,Android框架向我们提供了屏幕显示内容的当前状态以及视觉上影响我们应用程序的任何更改。...{ videoSurface.videoViews.forEach { unregisterVideo(it) } } 保留这个视频列表让我们可以根据应用程序的当前可见性来动态地设置播放状态...计算可视性 可视性定义为在屏幕上显示的UI组件可见区域的百分比。此度量对于我们了解当前显示给用户的内容至关重要。有了这些信息,我们就能为合作伙伴收集有关其内容参与度的信息。

    1.1K60

    Android Fragment用法知识点的讲解

    Android Fragment用法的讲解.png Fragment组件 Android Fragment组件.png Fragment是Android 3.0的时候被引入的,主要目的是为了给大屏幕(如平板电脑...动态加载: <LinearLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height...beginTransaction.add(R.id.layout,fragment); beginTransaction.addToBackStack(null); beginTransaction.commit(); 第一步,获取一个...(): 表示活动已被创建完成了,这里是activity创建成功; onStart(): 片段对用户可见; onResume(): 片段与用户开始交互; onPause(): 片段与用户不再交互;...onStop(): 片段不再对用户可见; onDestroyView(): 销毁与其View相关资源; onDestroy(): 销毁一切片段; onDetach(): 片段与其活动不再相关联

    1K60

    使用导航组件: 对话框目的地 | MAD Skills

    我想实现在当前 activity 上弹出一个相对轻量级的弹窗,而不是替换掉整个页面。我知道导航组件可以处理目的地,但是那只能替换掉单个 NavHostFragment 中的 fragment,对吗?...导航组件默认的行为确实是替换掉 NavHostFragment 中的 fragment。但是导航组件同样可以处理在 NavHostFragment 之外的对话框目的地。...在她多年前的烹饪节目中,Child 女士会先介绍菜谱,紧接着快速地展示完成的菜品,最后才是准备工作以及烹饪等中间冗长乏味的部分) 从 Android Studio 3.6 以后,您可以选择任一新建工程模版来使用导航组件...一开始我们需要在 Android Studio 中创建一个 Basic Activity。这一步我在 上一篇文章 中都介绍过,您可以查阅并获取更多详细信息。这里我们将直接跳到下一步。...更多信息 更多关于导航组件的详情,请查看 导航组件使用入门文档 DonutTracker 应用的完整代码,请查看 Github 示例 更多 MAD Skills 系列内容,请查看 Android Developers

    1.4K30

    ApacheCN 安卓译文集 20211225 更新

    二十五、构建简单的图片库应用 二十六、使用导航抽屉和片段的高级 UI 二十七、安卓数据库 二十八、临别赠言 Kotlin 安卓编程初学者手册 零、前言 一、安卓和 Kotlin 入门 二、Kotlin...二十五、带分页和滑动的高级用户界面 二十六、带有导航抽屉和片段的高级用户界面 二十七、安卓数据库 二十八、临别赠言 如何使用 Kotlin 构建安卓应用 零、前言 一、创建您的第一个应用 二、构建用户屏幕流...三、用片段开发用户界面 四、构建应用导航 五、基本库:RetroFit 库、Moshi 库和 Glide 库 六、回收器视图 七、安卓权限和谷歌地图 八、服务、工作管理器和通知 九、JUnit、Mockito...和 Espresso 的单元测试和集成测试 十、安卓架构组件 十一、持久化数据 十二、ButterKnife 和 Koin 的依赖注入 十三、RxJava 和协程 十四、架构模式 十五、使用协调器布局和运动布局的动画和过渡...UI 零、前言 一、片段和用户界面模块化 二、片段和用户界面灵活性 三、片段生命周期和专业化 四、使用片段事务 五、创建丰富的导航 六、片段与材质设计 Unity 安卓游戏开发学习手册 零、前言

    7.2K20

    知识点 | ViewModel 四种集成方式

    Activity 和 Fragment 通常会在下面三种情况下被销毁: 从当前界面永久离开: 用户导航至其他界面或直接关闭 Activity (通过点击返回按钮或执行的操作调用了 finish() 方法...每当数据更新时,要保存新的数据到 SavedStateHandle; 获取: 如代码中所示,调用 savedStateHandle.get(USER_KEY) 方法获取被保存的 userId。...Ian Lake 在他的演讲: 单 Activity 架构: 为什么、什么情况下以及如何使用中介绍了一些我们选择单一 Activity 架构的原因,而与本文相关的一点,是这种架构允许在多个界面 (destination...详细了解更多,请参阅: 主题演讲: Jetpack Navigation 的主题演讲 v.youku.com/v_show/id_X… 官方文档: 以编程方式与导航组件交互 developer.android.google.cn...中使用协程: viewModelScope medium.com/androiddeve… 官方文档: 将 Kotlin 协程与架构组件一起使用 developer.android.google.cn

    2.5K20

    MIUI12.5版本片多多播放卡顿分析与解决

    = null) {    forceLayout(mView);}代码片段会强制所有View做forceLayout。换句话说,显示或隐藏导航栏系统会强制整个布局树重新布局,即使他不需要。...但这个代码片段只在Android11上有,之前的版本没有此代码,所以Android11之前不会有此问题同时,命中条件如下:View.sForceLayoutWhenInsetsChanged = targetSdkVersion...< Build.VERSION_CODES.R;由此Android11之后的版本也不会有此问题,问题仅仅在Android11的系统发生。...查了当前出现问题的机型,都是Android11四、详细分析过程:1)分析MIUI12.0不卡,MIUI12.5版本卡由于升级后,没有MIUI12.0版本,使用huawei手机代替对比测试。...查询源码发现,调用此方法的大部分是TableLayout/ListView/AbsListView,而咱们的主副标题以及当前时间都不在这些容器里面。可以直接复写使用。当前采用方案2进行解决。

    1.4K30

    知识点 | ViewModel 四种集成方式

    Activity 和 Fragment 通常会在下面三种情况下被销毁: 从当前界面永久离开: 用户导航至其他界面或直接关闭 Activity (通过点击返回按钮或执行的操作调用了 finish() 方法...每当数据更新时,要保存新的数据到 SavedStateHandle; 获取: 如代码中所示,调用 savedStateHandle.get(USER_KEY) 方法获取被保存的 userId。...详细了解更多,请参阅: 主题演讲: Jetpack Navigation 的主题演讲 v.youku.com/v_show/id_X… 官方文档: 以编程方式与导航组件交互 developer.android.google.cn...中使用协程: viewModelScope medium.com/androiddeve… 官方文档: 将 Kotlin 协程与架构组件一起使用 developer.android.google.cn...如果您想了解架构组件Android Jetpack 的最新进展,请关注 Android 开发者博客,并留意 AndroidX 发布文档。 如果您对这些功能仍有疑问,可以在下方留言。感谢阅读!

    36820

    Android 8.0 功能和 API(翻译自Google官网)

    getLaunchDisplayId() 返回操作组件当前启动显示器。 对 adb shell 进行了扩展,以支持多个显示器。...输入和导航 键盘导航键区 如果您的应用中,某个操作组件使用一种复杂的视图层次结构(如图 2 所示),可考虑将多组界面元素组成一个键区,简化键盘导航这些元素的操作。...以一个包含五个导航键区的操作组件为例,用户可以使用键盘导航键区快捷键进行导航。键区按以下布局显示:顶部面板、左侧面板、主内容区域、底部面板和浮动操作按钮。...getAccountVisibility(android.accounts.Account, java.lang.String):获取特定用户帐号和软件包组合的可见性级别。...getPackagesAndVisibilityForAccount(android.accounts.Account):允许身份验证器获取存储的给定帐号的可见性值。

    2.9K30

    Android Studio Design Tools 中的 UX 更改 — Split View

    在之前的版本中,如果您想看到全部的组件树,则可能需要在 Text 模式 + Preview 工具窗口和 Design 模式中来回切换才能完成。...您现在可以使用新的 Split 模式打开导航栏文件并对其进行编辑,同时还能对其进行预览。这对于编辑大且复杂的图形时尤其有用。...而现在,您只需要单击 XML 部分上的 标签就可以在图形界面上显示该代码片段,即使该片段位于嵌套的图层内也可以做到,如图 7 所示。...类似地,您可以通过在编辑器的图形中选择某一个组件,就可以在导航图中轻松定位到相应的元素。对文本的选择会跳转到相应的 XML 标签中。 ? ?...Text Editor 和 Preview 对于当前使用 Text + Preview 面板作为开发 UI 时的默认配置的开发者,我们认为新的 Split 模式会提供一种非常相似的使用体验。

    2.3K20

    Android面试:怎么理解 onStart可见但不可交互?不要小瞧了这个问题,涉及面很多!

    为了确定在内存不足时应该终止哪些进程,Android 会根据每个进程中运行的组件以及这些组件的状态,将它们放入“重要性层次结构”。...比如 正在用户的互动屏幕上运行一个 Activity(其 onResume() 方法已被调用) 可见进程是正在进行用户当前知晓的任务。...此类事件包括接到来电、用户导航到另一个 Activity,或设备屏幕关闭。 所以可交互状态应该是在onResume之后,也就是Activity可见并且处于前台。...UI晋升+Framework内核解析+Android组件内核+数据持久化 360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化 解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计...+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发 微信小程序:小程序介绍

    1.2K12

    Android Fragment的用法实例详解

    Fragment组件 ? Fragment是Android 3.0的时候被引入的,主要目的是为了给大屏幕(如平板电脑)添加动态和灵活的UI支持。利用Fragment实现更好的用户体验。 ?...2.动态加载: <LinearLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height...beginTransaction.add(R.id.layout,fragment); beginTransaction.addToBackStack(null); beginTransaction.commit(); 第一步,获取一个...): 表示活动已被创建完成了,这里是activity创建成功; onStart(): 片段对用户可见; onResume(): 片段与用户开始交互; onPause(): 片段与用户不再交互;...onStop(): 片段不再对用户可见; onDestroyView(): 销毁与其View相关资源; onDestroy(): 销毁一切片段; onDetach(): 片段与其活动不再相关联。

    1.4K31

    AndroidStudio 开发基础知识【翻译完成】

    AndroidStudio 中应用更改的使用指南 二十六、安卓事件处理概述及示例 二十七、安卓触控和多点触控事件处理 二十八、使用安卓手势检测器类检测常见手势 二十九、在安卓上实现自定义手势识别 三十、安卓片段介绍...三十一、在 AndroidStudio 使用片段——一个例子 三十二、现代安卓应用架构和 Jetpack 二十三、Android Jetpack 视图模型教程 三十四、安卓 Jetpack 实时数据教程...四十、导航架构组件概述 四十一、安卓 Jetpack 导航组件教程 四十二、在安卓系统上创建和管理溢出菜单 四十三、运动布局介绍 四十四、安卓运动布局编辑器教程 四十五、运动布局的关键周期教程 四十六...三十八、在 AndroidStudio 使用片段——一个例子 三十九、现代安卓应用架构和 Jetpack 四十、Android Jetpack 视图模型教程 四十一、安卓 Jetpack 实时数据教程...四十七、导航架构组件概述 四十八、安卓 Jetpack 导航组件教程 四十九、运动布局介绍 五十、安卓运动布局编辑器教程 五十一、运动布局关键周期教程 五十二、使用浮动动作按钮和 Snackbar 五十三

    3.2K30
    领券