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);
}
}
}
}