我正在深层链接(使用jetpack导航),并且逻辑似乎在起作用。我遇到的问题是 activity_discover_detail 的逻辑似乎阻碍了 fragment_discover_landing
的逻辑我如何阻止这种情况发生?
这是我的导航图中有问题的活动和片段:
<fragment
android:id="@+id/fragment_discover_landing"
android:name="com.my.app.fragments.DiscoverLandingFragment"
android:label="@string/nav_discover_landing"
tools:layout="@layout/discover_landing_fragment">
<action
android:id="@+id/fragment_discover_landing_back_action"
app:popUpTo="@id/fragment_reading_lists"
app:popUpToInclusive="false" />
<argument
android:name="category"
android:defaultValue="Latest"
app:argType="string" />
<argument
android:name="searchText"
app:argType="string" />
<argument
android:name="searchMode"
android:defaultValue="false"
app:argType="boolean" />
<deepLink
android:id="@+id/discover_landing_category"
app:uri="myAppName://discover/category?name={category}" />
</fragment>
<activity
android:id="@+id/activity_discover_detail"
android:name="com.my.app.activities.DiscoverDetailActivity"
tools:layout="@layout/activity_discover_detail">
<argument
android:name="already_handled"
android:defaultValue="true"
app:argType="boolean" />
<deepLink
android:id="@+id/in_app_sell_page"
app:uri="myAppName://discover/{contentId}" />
</activity>
答案 0 :(得分:0)
我认为这是因为myAppName://discover/{contentId}
更笼统并包含myAppName://discover/category?name={category}
。
通常,您需要使活动的“处理”更加具体,以免隐藏片段。
也许像这样的链接可以解决问题:myAppName://discover/detail/{contentId}
我也不熟悉新的导航组件深层链接,
但是我看不到您在代码中定义变量contentId
的地方,在DiscoverDetailActivity
范围内定义的是already_handled
,我不知道这是否正常。
编辑
如果您无法控制链接格式,那么我建议在导航图中为深层链接设置一个入口点,而不是进行适当的解析,映射和重定向。
这将是一个透明的活动LinkDispatcherActivity
,它会拦截您的所有应用程序链接,您可以使用.*
通配符来定义您的链接:此<deepLink app:uri="myAppHost://myAppScheme/.*"/>
将匹配并拦截所有以{{1}开始的链接}。