【问题标题】:Deeplink into another fragment [ANDROID]深层链接到另一个片段 [ANDROID]
【发布时间】:2019-04-15 20:35:53
【问题描述】:

activity和fragment的结构是这样的:

使用 NavigationDrawer。

MainActivity 有一个Fragment 容器,在一个容器中应该有多个Fragment。应用启动后,fragment默认为fragment A。

使用 Fragment B 实现对 MainActivity 的深度链接,如何将 Fragment A(默认)的 Fragment 更改为 Fragment 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)

实现函数

    @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;
      }
    }
  }

【问题讨论】:

  • 使用NavigationDrawerBottomNavigationViewPager
  • 使用 NavigationDrawer @ZwalPyaeKyaw
  • 您可以使用FragmentManager()Fragments之间切换。
  • getSupportFragmentManager().beginTransaction(). replace(R.id.flContainer, new DemoFragment(), "SOMETAG"). commit(); // Now later we can lookup the fragment by tag DemoFragment fragmentDemo = (DemoFragment) getSupportFragmentManager().findFragmentByTag("SOMETAG"); 像这样。这是教程的link
  • 我用过,功能和NavigationDrawer菜单上的clickListener一样。现在的问题是当我在Applink上将switch fragment的功能调用为handleIntent时,没有效果。我总是转到片段 A。

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


【解决方案1】:

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

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

您可以根据深度链接的键值对片段进行隔离

例子

你的网址是

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
 }

【讨论】:

  • 有钥匙就成功了,没有钥匙就搞不定:(
  • 深度链接仅适用于 Fragment-B 还是有时也适用于 Fragment-A?
  • 对许多片段的实现。因此我让 handleAppLink 成为一个类
【解决方案2】:

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

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

查看以下链接了解更多详情:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    相关资源
    最近更新 更多