Как перемещаться по любому назначению для действия заголовка ящика в архитектуре навигации - PullRequest
0 голосов
/ 09 февраля 2020

Кто-нибудь, пожалуйста, объясните, как определить действие в архитектуре навигации для макета заголовка ящика.

snapshot

Теперь мне нужно установить щелчок заголовок ящика, и я установил его так:

headerOfNavDrawer.setOnClickListener{
    //Here I want to navigate to editProfileFragment
    //But For navigation I need an action in nav arch graph.
    //Where to put action??
}

1 Ответ

1 голос
/ 09 февраля 2020

У вас есть две вещи, которые вам нужны:

  1. Ссылка на NavController.

Согласно Перейти к документации по месту назначения, вы можете использовать findNavController(R.id.your_nav_host_fragment), где R.id.nav_host_fragment - это android:id, который вы положили на NavHostFragment в макете своей деятельности.

Действие go для редактирования фрагмента профиля.

Для этого Navigation позволяет настроить глобальные действия - действие, доступное из любого пункта назначения. в вашем графике. Это правильный способ запуска действий из пользовательского интерфейса, предоставленного вашей деятельностью.

<navigation xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main_nav"
        app:startDestination="@id/mainFragment">

  ...

  <action android:id="@+id/action_global_editProfileFragment"
      app:destination="@id/editProfileFragment"/>

</navigation>

При использовании Safe Args с глобальным действием это сгенерирует класс MainNavDirections с вашим действие над ним.

Это означает, что завершенный прослушиватель кликов будет выглядеть так:

headerOfNavDrawer.setOnClickListener{
    // Use the Kotlin extension in the -ktx artifacts
    val navController = findNavController(R.id.nav_host_fragment)

    // Now use the generated Directions class to navigate to the destination
    navController.navigate(MainNavDirections.actionGlobalEditProfileFragment())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...