public void navigate(@IdRes int resId,
@Nullable Bundle args,
@Nullable NavOptions navOptions,
@Nullable Navigator.Extras navigatorExtras) // 可设置共享元素动画参数
public void navigate(Uri deepLink,
NavOptions navOptions,
Navigator.Extras navigatorExtras)
- 除
resId
都是可选参数
通过实现抽象类NavDirections
创建自定义的对象来描述跳转目标(action)和传参(bundle)
public void navigate (NavDirections directions,
NavOptions navOptions,
Navigator.Extras navigatorExtras)
- 除
directions
都是可选参数
resId
可以是XML中的action
或者destination
节点id, 如果是action则会附带action的配置, 如果是destination则不会附带destination节点下的子节点action(写了白写).
args
即需要在fragment之间传递的Bundle参数, 但是导航还支持另外一种插件形式的传递参数方式-安全参数SafeArgs, 后面提到.
navOptions 即导航页面一些配置选项(例如动画)
返回上级
public boolean navigateUp ()
public boolean navigateUp (DrawerLayout drawerLayout)
public boolean navigateUp (AppConfiguration appConfiguration)
出栈
弹出栈, 即从Nav回退栈中清除Fragment.
public boolean popBackStack (int destinationId, // 目标id
boolean inclusive) // 是否包含参数目标
public boolean popBackStack ()
// 弹出当前Fragment
目的地变化监听器
每次进行跳转等页面变化时都会回调该监听器
public void addOnDestinationChangedListener (NavController.OnDestinationChangedListener listener)
public void removeOnDestinationChangedListener (NavController.OnDestinationChangedListener listener)
public interface OnDestinationChangedListener {
/**
- 导航完成以后回调函数(但是可能动画还在播放中)
- @param 控制导航到目标的导航控制器NavController
- @param 目标页面
- @param 导航到目标页面的参数
*/
void onDestinationChanged(@NonNull NavController controller,
@NonNull NavDestination destination, @Nullable Bundle arguments);
}
DeepLink
NavDeepLinkBuilder createDeepLink ()
// 内部就是调用的DeepLinkBuilder的构造函数
boolean handleDeepLink(Intent intent)
NavDestination getCurrentDestination ()
NavigatorProvider getNavigatorProvider ()
NavInflater getNavInflater()
Bundle saveState ()
void restoreState (Bundle navState)
// 用于处理NavController的状态获取和恢