Fixed
Status Update
Comments
se...@google.com <se...@google.com> #2
I have a same problem.
Internally, NavController#navigateUp() calls popBackStack().
And popBackStack() calls popBackStack(currentDestination.id, inclusive=true).
public boolean popBackStack() {
if (mBackStack.isEmpty()) {
// Nothing to pop if the back stack is empty
return false;
}
// Pop just the current destination off the stack
return popBackStack(getCurrentDestination().getId(), true); <--- this is cause.
}
So I think,
this problem can't be fixed without navigation cmpt. modification. :(
Internally, NavController#navigateUp() calls popBackStack().
And popBackStack() calls popBackStack(currentDestination.id, inclusive=true).
public boolean popBackStack() {
if (mBackStack.isEmpty()) {
// Nothing to pop if the back stack is empty
return false;
}
// Pop just the current destination off the stack
return popBackStack(getCurrentDestination().getId(), true); <--- this is cause.
}
So I think,
this problem can't be fixed without navigation cmpt. modification. :(
au...@gmail.com <au...@gmail.com> #3
Component used: Navigation
Version used: 1.0.0-alpha09
But on alpha09 version, popBackStack() is implemented differently.
public boolean popBackStack() {
if (mBackStack.isEmpty()) {
throw new IllegalArgumentException("NavController back stack is empty");
}
boolean popped = false;
while (!mBackStack.isEmpty()) {
popped = mBackStack.removeLast().getNavigator().popBackStack(); <------ different
if (popped) {
break;
}
}
return popped;
}
Please restore to the upper codes. Or create a new option. :)
Version used: 1.0.0-alpha09
But on alpha09 version, popBackStack() is implemented differently.
public boolean popBackStack() {
if (mBackStack.isEmpty()) {
throw new IllegalArgumentException("NavController back stack is empty");
}
boolean popped = false;
while (!mBackStack.isEmpty()) {
popped = mBackStack.removeLast().getNavigator().popBackStack(); <------ different
if (popped) {
break;
}
}
return popped;
}
Please restore to the upper codes. Or create a new option. :)
il...@google.com <il...@google.com>
il...@google.com <il...@google.com>
fa...@gmail.com <fa...@gmail.com> #5
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 45818ac652ba3a43b07f980cf22ab78be886d81d
Author: Ian Lake <ilake@google.com>
Date: Wed Jan 30 10:45:37 2019
Ensure that popBackStack() only pops one Fragment
When two Fragments with the same destination ID are
both added to the back stack, they previously had an
identical back stack name in FragmentManager, which
incorrectly means that popBackStack with that name
would pop both off the back stack.
By changing how we generate back stack names for
FragmentNavigator, we ensure that each back stack
name is unique and that only one Fragment will be
popped for each popBackStack() call.
Test: new FragmentNavigatorTest test
Change-Id: I26bdaeb65620001a74165a166aa74fe48cb468e6
Fixes: 123552990
M navigation/fragment/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorTest.kt
M navigation/fragment/src/main/java/androidx/navigation/fragment/FragmentNavigator.java
https://android-review.googlesource.com/890733
https://goto.google.com/android-sha1/45818ac652ba3a43b07f980cf22ab78be886d81d
Branch: androidx-master-dev
commit 45818ac652ba3a43b07f980cf22ab78be886d81d
Author: Ian Lake <ilake@google.com>
Date: Wed Jan 30 10:45:37 2019
Ensure that popBackStack() only pops one Fragment
When two Fragments with the same destination ID are
both added to the back stack, they previously had an
identical back stack name in FragmentManager, which
incorrectly means that popBackStack with that name
would pop both off the back stack.
By changing how we generate back stack names for
FragmentNavigator, we ensure that each back stack
name is unique and that only one Fragment will be
popped for each popBackStack() call.
Test: new FragmentNavigatorTest test
Change-Id: I26bdaeb65620001a74165a166aa74fe48cb468e6
Fixes: 123552990
M navigation/fragment/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorTest.kt
M navigation/fragment/src/main/java/androidx/navigation/fragment/FragmentNavigator.java
ko...@gmail.com <ko...@gmail.com> #6
This was regression introduced when fixing https://issuetracker.google.com/issues/110893637 - it is now fixed internally and will be available in the next release of Navigation.
Description
Navigation
Version used:
1.0.0-alpha04
Devices/Android versions reproduced on:
All
Steps to reproduce:
- Create multiple fragments with separate Toolbars. Lets Say A and B
- Move from A -> B and use NavigationUI.setupWithNavController(fragmentBToolbar, nav)
- Go back to A. Layout of fragment B is leaked forever.
Problem:
With every call
navController.addOnNavigatedListener(new NavigationUI.ToolbarOnNavigatedListener(toolbar, drawerLayout));
new listener is added to navController with hard reference to Toolbar view. And ToolbarView has reference to its parent View (fragments View). And never cleared