为什么Androidx.navigation使用Fragment's Relace?



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()
)

最新更新