Code: Select all
@NonNull
public final FragmentManager getParentFragmentManager() {
FragmentManager fragmentManager = mFragmentManager;
if (fragmentManager == null) {
throw new IllegalStateException(
"Fragment " + this + " not associated with a fragment manager.");
}
return fragmentManager;
}
Code: Select all
@JvmStatic
public fun findNavController(fragment: Fragment): NavController {
var findFragment: Fragment? = fragment
while (findFragment != null) {
if (findFragment is NavHostFragment) {
return findFragment.navHostController
}
val primaryNavFragment = findFragment.parentFragmentManager
.primaryNavigationFragment
if (primaryNavFragment is NavHostFragment) {
return primaryNavFragment.navHostController
}
findFragment = findFragment.parentFragment
}
// Try looking for one associated with the view instead, if applicable
val view = fragment.view
if (view != null) {
return Navigation.findNavController(view)
}
// For DialogFragments, look at the dialog's decor view
val dialogDecorView = (fragment as? DialogFragment)?.dialog?.window?.decorView
if (dialogDecorView != null) {
return Navigation.findNavController(dialogDecorView)
}
throw IllegalStateException("Fragment $fragment does not have a NavController set")
}
< /code>
Ich habe hier auf S.O. einige Beiträge gelesen. das schlug vor, so etwas wie: < /p>
view?.post {
findNavController().navigate(SplashFragmentDirections.actionSplashFragmentToLoginFragment())
}
< /code>
Kann dies zu unbeabsichtigten Problemen führen, wenn die Ansicht bereits null oder das Fragment bereits abgelöst ist? So etwas wie: < /p>
fun Fragment.navigateSafely(directions: NavDirections) {
if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
findNavController().navigate(directions)
} else {
Timber.d("Can't navigate to $directions, because lifecycle state is ${lifecycle.currentState}")
}
}