我要查找的是我的Fragment是否已经在后退栈中。
例如,我从Fragment A导航到Fragment B。稍后,我从Fragment B导航到Fragment C。现在,我想在Fragment C中检查后退栈中是否有Fragment A。如果是,则我想弹出所有的片段直到Fragment A,否则我想添加新的Fragment A。
请确保我想在Fragment C中检查Fragment A的可用性。
有没有什么好运?
先行致谢。
我要查找的是我的Fragment是否已经在后退栈中。
例如,我从Fragment A导航到Fragment B。稍后,我从Fragment B导航到Fragment C。现在,我想在Fragment C中检查后退栈中是否有Fragment A。如果是,则我想弹出所有的片段直到Fragment A,否则我想添加新的Fragment A。
请确保我想在Fragment C中检查Fragment A的可用性。
有没有什么好运?
先行致谢。
NavController
可以实现此功能。try {
val back:NavBackStackEntry = controller.getBackStackEntry(R.id.nav_a)
Log.d("in_back_stack", back.destination.label.toString())
} catch (ex: IllegalArgumentException){
Log.d("in_back_stack","no_entry")
}
NavController.getBackStackEntry(...)
和destinationId
,您可以轻松地知道片段是否已经在后退栈中。但是使用此方法时要小心。如果在后退栈中找不到destinationId
,则该方法将抛出一个IllegalArgumentException
。
您可以从任何地方进行检查。您只需要请确保我想在Fragment C中检查Fragment A的可用性。
NavController
的引用即可。fun NavController.isInBackStack(@IdRes id: Int): Boolean = runCatching {
getBackStackEntry(id)
}.isSuccess
fragmentManager.getFragments()
并遍历当前添加的片段。 - EpicPandaForce