如何在Android应用程序中深度链接到片段.有可能吗



那么,是否可以深度链接到片段中?因此,我的主要活动根据用户点击的内容启动不同的片段。

因此,我在清单文件中使用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
}

最新更新