Fixed
Status Update
Comments
il...@google.com <il...@google.com> #2
[Deleted User] <[Deleted User]> #3
Project: platform/frameworks/support
Branch: androidx-main
commit 812fe658e564bb57b0bea0ae79946d04e2b85610
Author: Simon Marquis <contact@simon-marquis.fr>
Date: Tue Dec 19 21:46:01 2023
[GH] Fix regression in dynamic labels with non-string typed arguments
Regression introduced inhttps://github.com/androidx/androidx/commit/76f9009e6cfc1cba5314cad87a6f1923203c54fa Reported in https://issuetracker.google.com/issues/316676794
Test: ./gradlew navigation:navigation-ui:cC
Fixes: 316676794
[AndroidX Navigation 2.6.0 broke dynamic app bar title for non String arguments](https://issuetracker.google.com/issues/316676794 )
This is an imported pull request fromhttps://github.com/androidx/androidx/pull/636 .
Resolves #636
Github-Pr-Head-Sha: f455c6d1e641cc72cc1bd371b1f47b7d87ec8eff
GitOrigin-RevId: 3ad8f763f17acb22678f1a87e183ef4e7dac5a9d
Change-Id: I94b4e28bb847632663be32b11e481d13789e8c1b
M navigation/navigation-common/src/main/java/androidx/navigation/NavDestination.kt
M navigation/navigation-ui/src/androidTest/java/androidx/navigation/ui/NavigationUITest.kt
https://android-review.googlesource.com/2882895
Branch: androidx-main
commit 812fe658e564bb57b0bea0ae79946d04e2b85610
Author: Simon Marquis <contact@simon-marquis.fr>
Date: Tue Dec 19 21:46:01 2023
[GH] Fix regression in dynamic labels with non-string typed arguments
Regression introduced in
Test: ./gradlew navigation:navigation-ui:cC
Fixes: 316676794
[AndroidX Navigation 2.6.0 broke dynamic app bar title for non String arguments](
This is an imported pull request from
Resolves #636
Github-Pr-Head-Sha: f455c6d1e641cc72cc1bd371b1f47b7d87ec8eff
GitOrigin-RevId: 3ad8f763f17acb22678f1a87e183ef4e7dac5a9d
Change-Id: I94b4e28bb847632663be32b11e481d13789e8c1b
M navigation/navigation-common/src/main/java/androidx/navigation/NavDestination.kt
M navigation/navigation-ui/src/androidTest/java/androidx/navigation/ui/NavigationUITest.kt
il...@google.com <il...@google.com> #4
Thanks for pointing this out and putting up the PR to fix this! We'll look at doing a Navigation 2.7.7 release with this fix.
ap...@google.com <ap...@google.com> #5
Awesome, thanks for the quick merge 😀
il...@google.com <il...@google.com> #6
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-common:2.8.0-alpha01
androidx.navigation:navigation-ui:2.8.0-alpha01
Description
Version used: 1.0.0-alpha11
Devices/Android versions reproduced on: irrelevant
I have a fragment like this:
<fragment
android:id="@+id/teamDetailFragment"
android:name="com.optima_apps.fkcz.ui.team.teamdetail.TeamDetailFragment"
android:label="{player_name}" <== PARAMETRIZED LABEL (from a plain string argument)
tools:layout="@layout/fragment_team_detail">
<argument
android:name="player"
app:argType="com.optima_apps.fkcz.models.Player" /> <== CUSTOM CLASS ARG TYPE
<argument
android:name="player_name"
app:argType="string" />
</fragment>
When parametrized label is used in combination with custom class argument type on a fragment, the app crashes when activity is recreated with a saved instance state. To reproduce, have a fragment configured as shown above, then in Developer Options enable "Don't keep activites" to force activity to destroy as soon as you leave it, then return to activity and it should crash like below:
2019-02-05 12:57:22.012 5790-5790/com.optima_apps.fkcz E/Parcel: Class not found when unmarshalling: com.optima_apps.fkcz.models.Player
java.lang.ClassNotFoundException: com.optima_apps.fkcz.models.Player
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:400)
at android.os.Parcel.readParcelableCreator(Parcel.java:2489)
at android.os.Parcel.readParcelable(Parcel.java:2443)
at android.os.Parcel.readValue(Parcel.java:2346)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2698)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.BaseBundle.containsKey(BaseBundle.java:345)
at androidx.navigation.ui.AbstractAppBarOnDestinationChangedListener.onDestinationChanged(AbstractAppBarOnDestinationChangedListener.java:90)
at androidx.navigation.ui.ToolbarOnDestinationChangedListener.onDestinationChanged(ToolbarOnDestinationChangedListener.java:57)
at androidx.navigation.NavController.addOnDestinationChangedListener(NavController.java:218)
at androidx.navigation.ui.NavigationUI.setupWithNavController(NavigationUI.java:292)
at androidx.navigation.ui.NavigationUI.setupWithNavController(NavigationUI.java:241)
at com.optima_apps.fkcz.FKCZActivity.onCreate(FKCZActivity.kt:41)
at android.app.Activity.performCreate(Activity.java:6915)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2746)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
Caused by: java.lang.ClassNotFoundException: com.optima_apps.fkcz.models.Player
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:1346)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:1406)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:400)
at android.os.Parcel.readParcelableCreator(Parcel.java:2489)
at android.os.Parcel.readParcelable(Parcel.java:2443)
at android.os.Parcel.readValue(Parcel.java:2346)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2698)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.BaseBundle.containsKey(BaseBundle.java:345)
at androidx.navigation.ui.AbstractAppBarOnDestinationChangedListener.onDestinationChanged(AbstractAppBarOnDestinationChangedListener.java:90)
at androidx.navigation.ui.ToolbarOnDestinationChangedListener.onDestinationChanged(ToolbarOnDestinationChangedListener.java:57)
at androidx.navigation.NavController.addOnDestinationChangedListener(NavController.java:218)
at androidx.navigation.ui.NavigationUI.setupWithNavController(NavigationUI.java:292)
at androidx.navigation.ui.NavigationUI.setupWithNavController(NavigationUI.java:241)
at com.optima_apps.fkcz.FKCZActivity.onCreate(FKCZActivity.kt:41)
at android.app.Activity.performCreate(Activity.java:6915)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2746)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
I have already Googled this a bit and this could be the solution:
When I change the label to be a static string, the library never goes into part of code that's crashing, and everything works properly, so I'm sure the issue is not on my side.
If you need any additional info I'm here.