那么,是否可以深度链接到片段中?因此,我的主要活动根据用户点击的内容启动不同的片段。
因此,我在清单文件中使用intent过滤器为我的主要活动创建了一个深度链接。但对于碎片,你们会怎么做呢??
任何帮助都会对有所帮助
谢谢。
您当然可以做到这一点。您需要解析活动中的意图,并使用片段管理器稍后填充您想要的片段。将Action和Fragment替换为自己的。
@Override
protected void onNewIntent(final Intent intent) {
super.onNewIntent(intent);
parseIntent(intent);
}
private void parseIntent(Intent intent) {
final String action = intent.getAction();
if (action != null) {
if (Action.<ONE>.equals(action)) {
FragmentManager fm = getFragmentManager();
Fragment<ONE> fragment = (Fragment<ONE>) Fragment.instantiate(this,
Fragment<ONE>.class.getCanonicalName(),
getIntent().getExtras());
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_id, fragment);
ft.commit();
} else if (Action.<TWO>.equals(action)) {
FragmentManager fm = getFragmentManager();
Fragment<TWO> fragment = (Fragment<TWO>) Fragment.instantiate(this,
Fragment<TWO>.class.getCanonicalName(),
getIntent().getExtras());
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_id, fragment);
ft.commit();
}
}
}
动作只是字符串,对于给定的意图应该是唯一的。它们可以是任何东西。类似:
"myapp.image_included"或"myapp.link_url"等
如果您使用的是Android Jetpack导航库,您可以轻松地为片段创建深度链接,这是有意义的,因为该库的整个理念是具有多个片段的单个活动。你可以在这里找到文档。
它的要点是在nav_graph.xml
文件中添加一个deeplink
元素,如下所示:
<fragment android:id="@+id/a"
android:name="com.example.myapplication.FragmentA"
tools:layout="@layout/a">
<deeplink app:url="www.example.com"
app:action="android.intent.action.MY_ACTION"
app:mimeType="type/subtype"/>
</fragment>
然后将导航XML链接到清单,将以下内容添加到AndroidManifest.xml
中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application ... >
<activity name=".MainActivity" ...>
...
<nav-graph android:value="@navigation/nav_graph" />
...
</activity>
</application>
</manifest>
这将生成从深度链接使用所需的所有intent-filters
。
然后使用意图进入FragmentA
,即
val intent = Intent().apply {
data = Uri.parse("www.example.com")
}
或者,如果你已经在你的应用程序中,你可以使用NavController
,只需调用findNavController().navigate("www.example.com")
是的,你可以在活动内部调用fragment(你要从哪个活动进入fragment类)-在onCreate方法内部调用
Intent appLinkIntent = getIntent();
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();
String recipeId = appLinkData.getLastPathSegment();
if(recipeId.equals("mybag")){
call fragment 1(i am sending link like this -(example)
www.google.com/mybag)
}else{
call fragment 2
}