using AndroidX.Annotations; using AndroidX.Navigation; using R = System.Common.R; // ReSharper disable once CheckNamespace namespace System { /// /// 扩展 /// public static class NavControllerExtensions { /// /// 导航跳转到 res\navigation\xx_navigation.xml 中指定的 Id 对应的 Fragment /// /// /// /// /// /// 跳转的行为是否为替换,如果是则不能通过后退返回之前的页面 public static void Navigate(this NavController navController, [IdRes] int resId, [IdRes] int? destinationId, bool inclusive) { var builder = new NavOptions.Builder() .SetLaunchSingleTop(true) .SetEnterAnim(R.anim.slide_in_right) .SetExitAnim(R.anim.slide_out_left) .SetPopEnterAnim(R.anim.slide_in_left) .SetPopExitAnim(R.anim.slide_out_right); if (destinationId.HasValue) { builder.SetPopUpTo(destinationId.Value, inclusive); } navController.Navigate(resId, null, builder.Build()); } /// public static void Navigate(this NavController navController, [IdRes] int resId, bool isReplace = false) { if (isReplace) { int destinationId = navController.CurrentDestination.Id; Navigate(navController, resId, destinationId, true); } else { Navigate(navController, resId, null, default); } } } }