Status Update
Comments
ti...@gmail.com <ti...@gmail.com> #2
So there does seem to be a bug in Navigation that causes this to fail.
When it navigates with popUpTo
and removes SecondFragment
, that removal in fragment is set for a frame later and before it is actually removed the navigate call in the onViewCreated
of SecondFragment
enqueues another call to add it back. But we still need to destroy SecondDetailFragment
which ends up marking the NavBackStackEntry
associated with SecondFragment
as complete before navigation has received the call from the fragment that it has been added back. So by the time it hits this check, the SecondFragment
is in the correct state, but Navigation has no way of referencing it so it assumes that it is not associated with an entry.
But this is not the way this type of situation should be implemented. Instead of having the destinations as part of the NavGraph, they should:
- be managed by the childFragmentManager of
SecondFragment
. So instead of going back toSecondFragment
just to go somewhere else, each of the fragments take the entire content ofSecondFragment
and are swapped out. - for some sort of a/b testing, set different graphs in the Activity. The graphs would keep the same
SecondFragment
id, but swap out the names and then you choose the correct graph based on the condition.
il...@google.com <il...@google.com> #3
ti...@gmail.com <ti...@gmail.com> #4
- Have
SecondFragment
as part of your graph and then inside ofSecondFragment
call thechildFragmentManager
andreplace
with the fragment you actually want to show, whether that isSecondTypeOne
orSecondTypeTwo
. - Create different graphs and follow along with the
on using different graphs dynamically and inflate and set the one needed based on logic in your Activity.docs
ru...@gmail.com <ru...@gmail.com> #5
shardViewModel.onGetTypeSecond.observe(viewLifecycleOwner) { isType1 ->
if (isType1) {
val graph = findNavController().graph
val carInstallmentNavGraph =
graph.findNode(R.id.nav_second) as NavGraph
carInstallmentNavGraph.setStartDestination(R.id.secondTypeOneFragment)
findNavController().navigate(SecondFragmentDirections.actionSecondFragmentToSecondTypeOneFragment())
} else {
val graph = findNavController().graph
val carInstallmentNavGraph =
graph.findNode(R.id.nav_second) as NavGraph
carInstallmentNavGraph.setStartDestination(R.id.secondTypeTwoFragment)
findNavController().navigate(SecondFragmentDirections.actionSecondFragmentToSecondTypeTwoFragment())
}
}
and removed app:popUpTo="@id/secondFragment" and app:popUpToInclusive="true"
<fragment
android:id="@+id/secondFragment"
android:name="com.example.navigationdeeplink.SecondFragment"
android:label="fragment_second"
tools:layout="@layout/fragment_second" >
<action
android:id="@+id/action_secondFragment_to_secondTypeOneFragment"
app:destination="@id/secondTypeOneFragment" />
<action
android:id="@+id/action_secondFragment_to_secondTypeTwoFragment"
app:destination="@id/secondTypeTwoFragment"
app:popUpTo="@id/secondFragment" />
</fragment>
k8...@gmail.com <k8...@gmail.com> #6
Is there a planned fix for this issue? We've been stuck on Navigation 2.5.3 for some time due to issues in 2.6.x and now this issue, and the suggested workaround of restructuring our navigation graph is a pretty big lift. If that's the only recommended path it would be helpful to know so we can try to plan for that work, otherwise we'd want to just wait for the fix that doesn't require restructuring.
il...@google.com <il...@google.com> #7
This was fixed by
jb...@google.com <jb...@google.com>
ap...@google.com <ap...@google.com> #8
Branch: androidx-main
commit b292676aa37122f0ca0215023dcdbe27168b2469
Author: Jeremy Woods <jbwoods@google.com>
Date: Wed Sep 27 21:25:35 2023
Add a test for navigate with popUpTo nested graph
Adding a test to ensure that if the start destination of a nested graph
is popped off the back stack when a fragment is created, Navigation does
not crash and gets to the correct position.
Bug: 287133013
Test: adding a test
Change-Id: Ie1e03aeeb00b730b7688311741847b2312bdbaa0
M navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavControllerWithFragmentTest.kt
ap...@google.com <ap...@google.com> #9
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-fragment:2.8.0-alpha01
ap...@google.com <ap...@google.com> #10
Branch: androidx-main
commit 682bae8ada2b2b29376003d55455230ff7320a69
Author: Clara Fok <clarafok@google.com>
Date: Tue May 09 15:13:14 2023
Migrate accompanist NavGraphBuilder into androidx
Test: ./gradlew navigation:navigation-compose:cC
Bug: 197140101
Relnote: "NavGraphBuilder now supports building composables and NavGraphs with transition animations."
Change-Id: I5ca9e22c8c3b02acaf80ddaa35b58ba7426c993a
M navigation/navigation-compose/src/main/java/androidx/navigation/compose/NavGraphBuilder.kt
ap...@google.com <ap...@google.com> #11
Branch: androidx-main
commit 895c4bb35ee11fe1c54f538699a845ddfaf7e2eb
Author: Clara Fok <clarafok@google.com>
Date: Tue May 09 13:14:10 2023
Migrate accompanist ComposeNavigator into androidx
Test: ./gradlew navigation:navigation-compose:cC
Bug: 197140101
Relnote: "ComposeNavigator now supports Destinations with Animations."
Change-Id: Ie33b4c2da53ff6c89494332a06be8123be67e879
M navigation/navigation-compose/src/main/java/androidx/navigation/compose/ComposeNavigator.kt
ap...@google.com <ap...@google.com> #12
Branch: androidx-main
commit 169254301b8aad0454c253a65abff7bf174ba164
Author: Clara Fok <clarafok@google.com>
Date: Tue May 09 11:11:42 2023
Bump compose version in navigation-compose
Bump from 1.0.1 to ToT project dependency. Project dependency because compose is currently in alpha.
Test: n/a
Bug: 197140101
Relnote: "navigation-compose has bumped compose dependency to use latest compose dependency"
Change-Id: Ide442548636637c2b75d46ef99c9913b0ebb60b8
M navigation/navigation-compose/build.gradle
il...@google.com <il...@google.com> #13
Now that AnimatedContent
is stable, we were able to move the code from
This means all of the support for setting custom transitions that existed in AnimatedNavHost
is directly supported in NavHost
.
This is available in
We'll be publishing a deprecation guide once Navigation 2.7.0-alpha01 is released, but it'll be essentially the inverse of the 0.31.2-alpha
).
Description
As of compose Compose Animation APIs are still
1.0.1
many of the@Experimental
.Because of AndroidX internal restrictions, modules cannot depend on experimental APIs from other modules.
In the interest of providing a solution for Navigation with custom Compose Animations as soon as possible, we opted to provide a new module in Accompanist Navigation . Once all the required animation APIs become stable, which is planned as part of Compose
1.1.0
, we will move the implementation back into theJetpack Navigation library
fromAccompanist Navigation Animation
.For more details, see the Animations in Navigation Compose blog post.