Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Post History
TL;DR : end your callback with a call to finish(). According to this article, addCallback really does add a callback. However, the way Android handles these callbacks is this: Iterator<OnBack...
Answer
#2: Post edited
- TL;DR : end your callback with a call to `finish()`.
- According to [this article](https://proandroiddev.com/handling-back-press-in-android-13-the-correct-way-be43e0ad877a), `addCallback` really does _add_ a callback. However, the way Android handles these callbacks is this:
- Iterator<OnBackPressedCallback> iterator =
- mOnBackPressedCallbacks.descendingIterator();
- while (iterator.hasNext()) {
- OnBackPressedCallback callback = iterator.next();
- if (callback.isEnabled()) {
- callback.handleOnBackPressed();
- return;
- }
- }
In other words, as soon as a callback is enabled, that callback is executed, and the rest are ignored.- This leads to a counterintuitive situation where having even a single callback enabled, causes that callback to be executed _instead_ of the code that actually takes you back to a previous Activity!
- This is intentional. The [official Android guide](https://developer.android.com/guide/navigation/custom-back#activity_onbackpressed) gives an example of overriding the "Back" behavior where the developer doesn't want the normal "Back" behavior to take place. The reason seems to be that this new way of working, supports Android's [Predictive Back Gesture](https://developer.android.com/guide/navigation/custom-back/predictive-back-gesture).
- The simplest solution is to end your callback with a call to `finish()`. Note that this will call `onDestroy()` for your Activity.
- If that is not an option, you may be able to make calls on the `onBackInvokedDispatcher` directly, rather than using the `onBackPressedDispatcher`. As of this writing, I have not yet done that, and it seems a rather dirty way of getting what you want.
- Further sources used: ["onBackPressed() deprecated, What is the alternative?"](https://stackoverflow.com/q/72634225/812149) on Stack Overflow.
- TL;DR : end your callback with a call to `finish()`.
- According to [this article](https://proandroiddev.com/handling-back-press-in-android-13-the-correct-way-be43e0ad877a), `addCallback` really does _add_ a callback. However, the way Android handles these callbacks is this:
- Iterator<OnBackPressedCallback> iterator =
- mOnBackPressedCallbacks.descendingIterator();
- while (iterator.hasNext()) {
- OnBackPressedCallback callback = iterator.next();
- if (callback.isEnabled()) {
- callback.handleOnBackPressed();
- return;
- }
- }
- In other words, as soon as a callback is enabled, that callback will be the one to be executed, and any callbacks added earlier will be ignored.
- This leads to a counterintuitive situation where having even a single callback enabled, causes that callback to be executed _instead_ of the code that actually takes you back to a previous Activity!
- This is intentional. The [official Android guide](https://developer.android.com/guide/navigation/custom-back#activity_onbackpressed) gives an example of overriding the "Back" behavior where the developer doesn't want the normal "Back" behavior to take place. The reason seems to be that this new way of working, supports Android's [Predictive Back Gesture](https://developer.android.com/guide/navigation/custom-back/predictive-back-gesture).
- The simplest solution is to end your callback with a call to `finish()`. Note that this will call `onDestroy()` for your Activity.
- If that is not an option, you may be able to make calls on the `onBackInvokedDispatcher` directly, rather than using the `onBackPressedDispatcher`. As of this writing, I have not yet done that, and it seems a rather dirty way of getting what you want.
- Further sources used: ["onBackPressed() deprecated, What is the alternative?"](https://stackoverflow.com/q/72634225/812149) on Stack Overflow.
#1: Initial revision
TL;DR : end your callback with a call to `finish()`. According to [this article](https://proandroiddev.com/handling-back-press-in-android-13-the-correct-way-be43e0ad877a), `addCallback` really does _add_ a callback. However, the way Android handles these callbacks is this: Iterator<OnBackPressedCallback> iterator = mOnBackPressedCallbacks.descendingIterator(); while (iterator.hasNext()) { OnBackPressedCallback callback = iterator.next(); if (callback.isEnabled()) { callback.handleOnBackPressed(); return; } } In other words, as soon as a callback is enabled, that callback is executed, and the rest are ignored. This leads to a counterintuitive situation where having even a single callback enabled, causes that callback to be executed _instead_ of the code that actually takes you back to a previous Activity! This is intentional. The [official Android guide](https://developer.android.com/guide/navigation/custom-back#activity_onbackpressed) gives an example of overriding the "Back" behavior where the developer doesn't want the normal "Back" behavior to take place. The reason seems to be that this new way of working, supports Android's [Predictive Back Gesture](https://developer.android.com/guide/navigation/custom-back/predictive-back-gesture). The simplest solution is to end your callback with a call to `finish()`. Note that this will call `onDestroy()` for your Activity. If that is not an option, you may be able to make calls on the `onBackInvokedDispatcher` directly, rather than using the `onBackPressedDispatcher`. As of this writing, I have not yet done that, and it seems a rather dirty way of getting what you want. Further sources used: ["onBackPressed() deprecated, What is the alternative?"](https://stackoverflow.com/q/72634225/812149) on Stack Overflow.