Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
475 views
in Technique[技术] by (71.8m points)

android - Opening activity inside a navgraph with a deeplink causing a crash

I have an activity inside an navgraph, directly i am able to navigate to it by below code

Navigation.findNavController(requireView())?.navigate(R.id.sampleActivity)

Please find the navgraph below

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/home_nav_graph"
    app:startDestination="@id/appFirstFragment">

    <fragment
        android:id="@+id/appFirstFragment"
        android:name="com.example.deeplinkpoc.AppFirstFragment"
        android:label="fragment_app_first"
        tools:layout="@layout/fragment_app_first" >
    </fragment>
    <activity
        android:id="@+id/sampleActivity"
        android:name="com.example.deeplinkpoc.SampleActivity"
        android:label="activity_sample"
        tools:layout="@layout/activity_sample">
        <deepLink
            android:id="@+id/deepLink2"
            app:uri="https://www.abcdxyz.com/test" />
    </activity>
     </navigation>

But if i try to navigate to it using deeplink its crashing

Process: com.example.deeplinkpoc, PID: 12805
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.deeplinkpoc/com.example.deeplinkpoc.HomeActivity}: android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class androidx.fragment.app.FragmentContainerView
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2914)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3049)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6692)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
 Caused by: android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class androidx.fragment.app.FragmentContainerView
 Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class androidx.fragment.app.FragmentContainerView
 Caused by: android.content.res.Resources$NotFoundException: Unable to find resource ID #0x0
    at android.content.res.ResourcesImpl.getResourceTypeName(ResourcesImpl.java:271)
    at android.content.res.Resources.getResourceTypeName(Resources.java:1986)
    at androidx.navigation.ActivityNavigator.navigate(ActivityNavigator.java:200)
    at androidx.navigation.ActivityNavigator.navigate(ActivityNavigator.java:44)
    at androidx.navigation.NavController.navigate(NavController.java:1057)
    at androidx.navigation.NavController.handleDeepLink(NavController.java:732)
    at androidx.navigation.NavController.onGraphCreated(NavController.java:633)
    at androidx.navigation.NavController.setGraph(NavController.java:590)
    at androidx.navigation.NavController.setGraph(NavController.java:555)
    at androidx.navigation.NavController.setGraph(NavController.java:537)
    at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.java:248)
    at androidx.fragment.app.Fragment.performCreate(Fragment.java:2684)
    at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:280)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1175)
    at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224) 

UPDATE please find navhost activity xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".HomeActivity">
<androidx.fragment.app.FragmentContainerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/my_nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    app:navGraph="@navigation/home_nav_graph"
    /></androidx.constraintlayout.widget.ConstraintLayout>

How can i open an activity inside a navgraph with deeplink ?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

As per this issue, this is a known issue with Navigation 2.3.2, already marked as fixed for the upcoming Navigation 2.3.3 release.

However:

note that it is never the right approach to attach a <deeplink> to an <activity> destination as that will never give you the right behavior when using an implicit deep link on another app's task (where the system back should immediately take the user back to the app that triggered your deep link). Instead, you should attach your deep link directly to your second activity (either by manually writing the appropriate <intent-filter> or by adding the <deeplink> to the start destination of a nav host in that second activity).

So really, you should move your <deeplink> off of your activity destination, which will both fix your crash (on every version of Navigation) and actually give you the correct behavior. Any validation you need to do needs to be done on the actual correct activity.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...