FragmentNavigator#navigate((:
public void navigate(@NonNull Destination destination, @Nullable Bundle args,
@Nullable NavOptions navOptions) {
// ......
ft.replace(mContainerId, frag);
ft.commit();
}
等等。 我想让片段使用 add。重新加载每个导航
您可以为此提供自定义导航器。
而不是FragmentNavigator
NavController.getNavigatorProvider().addNavigator().
必须批注您的自定义导航器
@Navigator.Name("fragment")
例如
@Navigator.Name("fragment")
类 HookFragmentNavigator(private val delegate: FragmentNavigator(: Navigator
override fun navigate(
destination: FragmentNavigator.Destination,
args: Bundle?,
navOptions: NavOptions?,
navigatorExtras: Extras?
): NavDestination? {
"hook delegate navigate".println()
return delegate.navigate(destination, args, navOptions, navigatorExtras)
}
override fun createDestination(): FragmentNavigator.Destination {
return delegate.createDestination()
}
override fun popBackStack(): Boolean {
return delegate.popBackStack()
}
}
findNavController(R.id.fragment).apply {
navigatorProvider.addNavigator(
HookFragmentNavigator(navigatorProvider.getNavigator(FragmentNavigator::class.java))
)
}.navigate(
it,
null,
NavOptions.Builder().setAnimal().build()
)