Skip to content

关于单Activity,从loadRoot中跳转其他页面时设置属性popSelf = true的问题 #45

@SunnyGege66

Description

@SunnyGege66

作者您好,当项目中只有一个Activity,初始化加载loadRoot为登录页LoginFragment,当我登录后要跳转HomeFragment时使用方法navigator.push(HomeFragment::class) {
popSelf = true
applySlideInOut()
}
需要把原来的LoginFragment弹出并跳转到HomeFragment,需求是此时栈内只有HomeFragment即可
但是当我像上面那样做的时候跳转报错:java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference 并异常退出应用。定位源码在FragivityFragmentNavigator -> navigate方法 ->代码片段:
else if (isSingleTopReplacement || isPopSelf) {
if (prevFragment != null) {
ft.remove(prevFragment)
fragment.mTag = generateBackStackName(backStack.size - 1, destId)
val size = fragmentManager.mBackStack.size
if (size > 0) {
fragmentManager.mBackStack[size - 1].mOps
.filter { it.mCmd == OP_ADD && it.mFragment == prevFragment }
.forEach { it.mFragment = fragment }
}
}
isAdded = false
}
里的 fragmentManager.mBackStack为空,在获取size前我加上fragmentManager.mBackStack!=null判断没报错了,这算Bug吗?
或者源码里有解决方案一开始就能弹出loadRoot初始化页面并跳转其他页面的正确解决方案吗?

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions