|
6 | 6 | import android.os.Build; |
7 | 7 | import android.os.Bundle; |
8 | 8 | import android.util.Log; |
| 9 | +import android.util.SparseIntArray; |
9 | 10 | import android.view.View; |
10 | 11 |
|
11 | 12 | import androidx.activity.OnBackPressedCallback; |
@@ -74,6 +75,8 @@ public class MainActivity extends AppCompatActivity { |
74 | 75 | private StartupViewModel startupViewModel; |
75 | 76 | private ConsentInformation consentInformation; |
76 | 77 | private NavController navController; |
| 78 | + private final SparseIntArray navOrder = new SparseIntArray(); |
| 79 | + private int currentNavIndex; |
77 | 80 | private AppUpdateNotificationsManager appUpdateNotificationsManager; |
78 | 81 | private AppUpdateManager appUpdateManager; |
79 | 82 | private InstallStateUpdatedListener installStateUpdatedListener; |
@@ -227,23 +230,47 @@ private void observeViewModel() { |
227 | 230 | navGraph.setStartDestination(uiState.getDefaultNavDestination()); |
228 | 231 | navController.setGraph(navGraph); |
229 | 232 |
|
230 | | - NavOptions springNavOptions = new NavOptions.Builder() |
| 233 | + navOrder.put(R.id.navigation_home, 0); |
| 234 | + navOrder.put(R.id.navigation_android_studio, 1); |
| 235 | + navOrder.put(R.id.navigation_about, 2); |
| 236 | + currentNavIndex = navOrder.get(navController.getCurrentDestination().getId()); |
| 237 | + |
| 238 | + NavOptions forwardOptions = new NavOptions.Builder() |
231 | 239 | .setEnterAnim(R.anim.fragment_spring_enter) |
232 | 240 | .setExitAnim(R.anim.fragment_spring_exit) |
233 | 241 | .setPopEnterAnim(R.anim.fragment_spring_pop_enter) |
234 | 242 | .setPopExitAnim(R.anim.fragment_spring_pop_exit) |
235 | 243 | .build(); |
236 | 244 |
|
| 245 | + NavOptions backwardOptions = new NavOptions.Builder() |
| 246 | + .setEnterAnim(R.anim.fragment_spring_pop_enter) |
| 247 | + .setExitAnim(R.anim.fragment_spring_pop_exit) |
| 248 | + .setPopEnterAnim(R.anim.fragment_spring_enter) |
| 249 | + .setPopExitAnim(R.anim.fragment_spring_exit) |
| 250 | + .build(); |
| 251 | + |
237 | 252 | if (useRail) { |
238 | 253 | NavigationUI.setupWithNavController(mBinding.navRail, navController); |
239 | 254 | mBinding.navRail.setOnItemSelectedListener(item -> { |
240 | | - navController.navigate(item.getItemId(), null, springNavOptions); |
| 255 | + if (item.getItemId() == navController.getCurrentDestination().getId()) { |
| 256 | + return true; |
| 257 | + } |
| 258 | + int newIndex = navOrder.get(item.getItemId()); |
| 259 | + NavOptions options = newIndex > currentNavIndex ? forwardOptions : backwardOptions; |
| 260 | + navController.navigate(item.getItemId(), null, options); |
| 261 | + currentNavIndex = newIndex; |
241 | 262 | return true; |
242 | 263 | }); |
243 | 264 | } else { |
244 | 265 | NavigationUI.setupWithNavController(navBarView, navController); |
245 | 266 | navBarView.setOnItemSelectedListener(item -> { |
246 | | - navController.navigate(item.getItemId(), null, springNavOptions); |
| 267 | + if (item.getItemId() == navController.getCurrentDestination().getId()) { |
| 268 | + return true; |
| 269 | + } |
| 270 | + int newIndex = navOrder.get(item.getItemId()); |
| 271 | + NavOptions options = newIndex > currentNavIndex ? forwardOptions : backwardOptions; |
| 272 | + navController.navigate(item.getItemId(), null, options); |
| 273 | + currentNavIndex = newIndex; |
247 | 274 | return true; |
248 | 275 | }); |
249 | 276 | } |
|
0 commit comments