Android Navigation获取栈顶Fragment

简介: 由于项目底层是Unity,在上层切换Activity时,下面的unity界面会暂停,界面不能刷新,会有很多问题,于是我们就想到了Activity App,那么就想到了使用JetPack的Navigation来统一管理Fragment之间的跳转。

由于项目底层是Unity,在上层切换Activity时,下面的unity界面会暂停,界面不能刷新,会有很多问题,于是我们就想到了Activity App,那么就想到了使用JetPack的Navigation来统一管理Fragment之间的跳转。


今天需求是需要判断当前栈顶的Fragment的是不是指定Fragment,如果是就不通知此条消息,那么就需要获取当前正在展示的Fragment,即栈顶的Fragment。


以往获取栈顶的Activity很简单,


 

val manager: ActivityManager = getSystemService(ACTIVITY_SERVICE) as ActivityManager
    val info: ActivityManager.RunningTaskInfo = manager.getRunningTasks(1)[0]
    val className: String? = info.topActivity?.className  //类名
    val shortClassName = className?.substring(className.lastIndexOf(".") + 1, className.length)

这个还把我考住了。


最后写了个方法:


fun <F : Fragment> AppCompatActivity.getFragment(fragmentClass: Class<F>): F? {
    val navHostFragment = this.supportFragmentManager.fragments.first() as NavHostFragment
       navHostFragment.childFragmentManager.fragments.forEach {
        if (fragmentClass.isAssignableFrom(it.javaClass)) {
            return it as F
        }
    }
    return null
}

如何使用:因为是单Activity,所以在Activity直接调用就行了,再把Fragment的class对象传进来就行了。



5560a95679a916e52daf602b936fd44.png

isAssignableFrom()方法:确定一个类(B)是不是继承来自于另一个父类(A),一个接口(A)是不是实现了另外一个接口(B),或者两个类相同。


其实还是使用了FragmentActivity的Fragmentmanager获取到fragment列表的栈顶Fragment,在用拿到的Fragment来判断他的子Fragmeng列表,最后进行判断。


相关文章
|
6月前
|
XML Android开发 数据格式
Android -- Fragment动态注册
Android -- Fragment动态注册
31 0
|
3月前
|
Android开发
Android基础知识:什么是Fragment?与Activity的区别是什么?
Android基础知识:什么是Fragment?与Activity的区别是什么?
283 54
|
4月前
|
Android开发 Kotlin
android开发,使用kotlin学习Fragment
android开发,使用kotlin学习Fragment
48 0
|
4月前
|
XML Java Android开发
Android Studio App开发之碎片Fragment的讲解及实战(附源码 包括静态和动态注册)
Android Studio App开发之碎片Fragment的讲解及实战(附源码 包括静态和动态注册)
42 1
|
8月前
|
Android开发
Android ViewModel+LiveData实现Fragment间通信详解
Android ViewModel+LiveData实现Fragment间通信详解
101 0
|
8月前
|
Android开发
Android 中Activity和Fragment生命周期的具体变化详解
Android 中Activity和Fragment生命周期的具体变化详解
90 0
|
8月前
|
Android开发
Android 中Fragment和Activity之间的通信
Android 中Fragment和Activity之间的通信
42 0
|
8月前
|
Android开发
Android 中使用RadioGroup+Fragment实现底部导航栏的功能
Android 中使用RadioGroup+Fragment实现底部导航栏的功能
75 0
|
9月前
|
Android开发 容器
Android上机实验-6 Fragment的使用
Android上机实验-6 Fragment的使用
66 1