我在导航图中有一个活动,我可以通过下面的代码直接导航到它
Navigation.findNavController(requireView())?.navigate(R.id.sampleActivity)
请在下面找到导航图
<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>
但是如果我尝试使用深层链接导航到它,它就会崩溃
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)
更新 请找到 navhost 活动 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>
如何在带有深层链接的导航图中打开活动?
答案 0 :(得分:0)
确保遵循以下步骤:
3
已添加到 NavGraph
中的 Application
类。AndroidManifesto.xml
添加到 ACTION_VIEW
。如果没有其他方法,那么以下解决方案肯定会起作用:
DeepLink
中为 <activity>
添加 AndroidManifesto
标签。sampleActivity
添加到此 implicit intent
标记中,使用 sampleActivity
。ACTION_VIEW
的 implicit intent
生命周期事件中收集此 sampleActivity
。您不必依赖 onCreate
从 Navigation Component
导航到 simpleActivity
。您可以通过 deepLink
自己注册深层链接,它会正常工作。
implicit intent
的作用是检测 NavigationComponent
中存在的 DeepLinks
并将它们添加到 Graph
。您的问题可能源于您想要访问的 AndroidManifesto
,即 activity
位于 sampleActivity
中。在这种情况下,将不会创建 nestedGraph
。但是,deepLink
的 destionationId
仍然为 sampleActivity
所知。因此解释了为什么您可以从 NavController
到达 sampleActivity
而不能从 destinationId
到达。
要使您的应用程序知道 deepLink
sampleActivity
,您必须将此 deepLink
设置传播到 deepLink
。只需在 parentGraph
中初始化以下 deepLink
。
parentGraph
答案 1 :(得分:-1)
我不相信 activity
布局。所以,我的回答可能是错误的。
来自您的错误日志 Unable to start activity ComponentInfo()
。
您在调用另一个活动布局内的活动时遇到问题。
您可以使用 linearLayout
代替 activity
。
<linearLayout
android:id="@+id/sampleActivity"
android:orientation="vertical"
tools:layout="@layout/activity_sample">
<deepLink
android:id="@+id/deepLink2"
app:uri="https://www.abcdxyz.com/test" />
</linearLayout>
还有另一种方法可以做到这一点。
<linearLayout
android:id="@+id/sampleActivity"
android:orientation="vertical">
<fragment
android:id="@+id/appFirstFragment"
android:name="com.example.deeplinkpoc.AppFirstFragment"
android:label="fragment_app_first"
tools:layout="@layout/activity_sample" >
</fragment>
<deepLink
android:id="@+id/deepLink2"
app:uri="https://www.abcdxyz.com/test" />
</linearLayout>