Skip to content

Instantly share code, notes, and snippets.

@jhamberg
Last active March 18, 2019 01:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jhamberg/1a4993375e7df3d77f0b26651fcaf23c to your computer and use it in GitHub Desktop.
Save jhamberg/1a4993375e7df3d77f0b26651fcaf23c to your computer and use it in GitHub Desktop.
Transition animations for onNavDestinationSelected
import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.navigation.NavController;
import androidx.navigation.NavDestination;
import androidx.navigation.NavGraph;
import androidx.navigation.NavOptions;
// Example with default animations:
// NavOptions.Builder builder = new NavOptions.Builder()
// .setEnterAnim(R.anim.nav_default_enter_anim)
// .setExitAnim(R.anim.nav_default_exit_anim)
// .setPopEnterAnim(R.anim.nav_default_pop_enter_anim)
// .setPopExitAnim(R.anim.nav_default_pop_exit_anim);
// NavigationUIExtension.onNavDestinationSelected(item, nav, builder);
//
// Created by Jonatan Hamberg on 18.3.2019.
// (C) 2019 - University of Helsinki
public class NavigationUIExtension {
public static boolean onNavDestinationSelected(@NonNull MenuItem item,
@NonNull NavController navController,
@NonNull NavOptions.Builder builder) {
if ((item.getOrder() & Menu.CATEGORY_SECONDARY) == 0) {
NavDestination destination = findStartDestination(navController.getGraph());
builder.setPopUpTo(destination.getId(), false);
}
NavOptions options = builder.build();
try {
navController.navigate(item.getItemId(), null, options);
return true;
} catch (IllegalArgumentException e) {
return false;
}
}
private static NavDestination findStartDestination(@NonNull NavGraph graph) {
NavDestination startDestination = graph;
while (startDestination instanceof NavGraph) {
NavGraph parent = (NavGraph) startDestination;
startDestination = parent.findNode(parent.getStartDestination());
}
return startDestination;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment