要实现Android导航全局操作覆盖之前的片段,你可以使用以下解决方法:
public class NavigationHandler extends FragmentNavigator {
public NavigationHandler(@NonNull Context context, @NonNull FragmentManager manager, int containerId) {
super(context, manager, containerId);
}
@Override
protected void navigateToDestination(@NonNull NavDestination destination, @Nullable Bundle args, @Nullable NavOptions options, @Nullable Navigator.Extras extras) {
// 在这里执行全局操作
// 例如,隐藏之前的片段
List fragments = getFragmentManager().getFragments();
for (Fragment fragment : fragments) {
getFragmentManager().beginTransaction().hide(fragment).commit();
}
super.navigateToDestination(destination, args, options, extras);
}
}
...
在这个示例中,当从Fragment1导航到Fragment2时,导航操作类NavigationHandler会在导航之前隐藏所有之前的片段。你可以根据自己的需求修改此类中的代码以实现其他全局操作。
需要注意的是,如果你使用的是Jetpack Navigation组件,你还需要在导航图中将自定义的导航操作类指定为相应导航操作的navigator属性值。