深入链接到另一个片段[ANDROID]

时间:2018-11-13 04:20:46

标签: java android android-fragments deep-linking applinks

活动和片段的结构类似于:

使用NavigationDrawer。

MainActivity有一个用于Fragment的容器,在一个容器中应该有很多碎片。启动应用程序后,片段的默认值为片段A。

使用片段B实现对MainActivity的深度链接,如何将片段从片段A(默认)更改为片段B(目标)。

任何帮助都会有所帮助:) 谢谢

类句柄Applink

    override fun onInitView() {
    handleIntent()
  }

  private fun handleIntent() {
    // ATTENTION: This was auto-generated to handle app links.
    val intent = intent
    val appLinkAction = intent.action
    val appLinkData = intent.data
    if (appLinkData != null) {
      handleAppLinkIntent(appLinkData)
    } else {
      handleActivityIntent(intent)
    }
  }

  protected abstract fun handleActivityIntent(intent: Intent)

  protected abstract fun handleAppLinkIntent(appLinkData: Uri)

impl函数

    @Override
  protected void handleActivityIntent(Intent intent) {
    Bundle bundle = intent.getExtras();
    if (bundle != null) {
      switch (this.paramMainMenu) {
        case Constants.ZERO:
          this.goToProductList();
          break;
        case Constants.ONE:
          this.goToFragmentA();
          break;
        case Constants.TWO:
          this.goToFragmentB();
          break;
        case Constants.THREE:
          this.goToFragmentC();
          break;
      }
    }
  }

@Override
  protected void handleAppLinkIntent(Uri appLinkData) {
    if(appLinkData.getQueryParameterNames().isEmpty()){
      String path = appLinkData.getPath();
      switch (path) {
        case "/kfc/food/price/outofstock":
          this.paramMainMenu = Constants.ONE;
          break;
        case "/food/price/qty":
          this.paramMainMenu = Constants.THREE;
          break;
        case "/price/unbuyable":
          this.paramMainMenu = Constants.TWO;
          break;
        case "/price":
          this.paramMainMenu = Constants.ZERO;
          break;
        case "/food/price":
          this.paramMainMenu = Constants.ZERO;
          break;
        case "/a/food/item":
          this.paramMainMenu = Constants.ZERO;
          break;
        case "/":
          this.paramMainMenu = Constants.ZERO;
          break;
      }
    }
  }

2 个答案:

答案 0 :(得分:1)

您的URL应该包含一些键值来确定要打开的片段 让我们举个例子: Fragment-A旨在显示要约清单 Fragment-B是用来显示产品列表的设计

您的URL包含一个应显示“产品”的键。

您可以根据Deeplink的键值分隔片段

示例

您的网址是

  

https://xyzcompany.com/myapp?open=products

     

insinde MainActivity.class onCreate()

String key;
    Intent appLinkIntent = getIntent();
    String appLinkAction = appLinkIntent.getAction();
    Uri appLinkData = appLinkIntent.getData();
    if (appLinkData != null) {
        key = appLinkData.getQueryParameter("open");
    }

 if(key == products){
       //launch Fragment-B
    } else {
      //launch Fraagment-A
 }

答案 1 :(得分:0)

Android在Android Jetpack库中添加了导航组件,以处理应用程序中的复杂导航方案。

您可以创建目标(片段等)并通过操作将它们链接起来,以从一个目标导航到另一个目标。您可以使用导航组件将深层链接与片段相关联。这应该可以解决您的问题。

检查以下链接以获取更多详细信息:

https://developer.android.com/guide/navigation

https://developer.android.com/guide/navigation/navigation-deep-link