Диплинк в другой фрагмент [ANDROID] - PullRequest
0 голосов
/ 13 ноября 2018

Структура деятельности и фрагмент похож на:

Использование NavigationDrawer.

MainActivity имеет контейнер для фрагмента, в одном контейнере должно быть много фрагментов. После запуска приложения по умолчанию фрагментом является фрагмент A.

Реализация Deeplink в MainActivity с Фрагментом B, как я могу изменить фрагмент с Фрагмента 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;
      }
    }
  }

1 Ответ

0 голосов
/ 13 ноября 2018

Ваш URL должен содержать некоторые ключевые значения для определения фрагмента, который нужно открыть. Давайте рассмотрим пример: Fragment-A - это дизайн для отображения списка предложений. Fragment-B - это дизайн для отображения списка продуктов.

ваш URL содержит ключ, который должен показывать «product».

вы можете выделить фрагмент на основе значения ключа deeplink

Пример

ваш 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
 }
...