При переходе вверх от фрагмента, содержащего DialogFragment, повторно отображается компонент навигации DialogFragment. - PullRequest
2 голосов
/ 09 марта 2020

Я использую компонент навигации и настроил стрелку вверх для автоматической обработки процесса навигации в моем единственном действии mainActivity У меня есть это:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item)
}

диалоговое окно отображается, когда пользователь нажмите на элемент меню из StationsFragment следующим образом:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    val bundle = Bundle()
    bundle.putInt(GAME_ID_BUNDLE_KEY, gameId)
    findNavController().navigate(R.id.action_stationsFragment_to_gameInfoDialog, bundle)
    return true
}

, и я настроил график навигации следующим образом:

<fragment
    android:id="@+id/stationsFragment"
    android:name="com.accad.accadgame.screens.fragments.StationsFragment"
    android:label="@string/stations_fragment_title"
    tools:layout="@layout/fragment_stations"
    >
    <argument
        android:name="game_id"
        app:argType="integer"
        android:defaultValue="-1" />
    <action
        android:id="@+id/action_stationsFragment_to_sectionsFragment"
        app:destination="@id/sectionsFragment"
        app:popUpTo="@+id/stationsFragment"
        app:popUpToInclusive="false" />
    <action
        android:id="@+id/action_stationsFragment_to_gameInfoDialog"
        app:destination="@id/gameInfoDialog"
        app:popUpTo="@id/stationsFragment"
        app:popUpToInclusive="false"
        />
</fragment>
<dialog
    android:id="@+id/gameInfoDialog"
    android:name="com.accad.accadgame.screens.dialogs.GameInfoDialog"
    android:label="GameInfoDialog"
    tools:layout="@layout/dialog_game_info"
    >
    <argument
        android:name="game_id"
        app:argType="integer"
        android:defaultValue="-1" />

Здесь, на изображении, я нахожусь в StationFragment и у меня есть info menuItem

enter image description here

, и когда я нажимаю info menuItem, диалоговое окно отображается нормально

enter image description here

, и когда я закрываю диалоговое окно и нажимаю стрелку вверх StationsFragment, диалоговое окно отображается снова

1 Ответ

1 голос
/ 11 марта 2020

После долгих поисков стрелка назад также считается элементом меню

, поэтому при нажатии стрелки назад вызывается метод onOptionsItemSelected, и необходимо проверить идентификатор элемента меню.

и код будет:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    if(item.itemId == R.id.gameInfo) {
        val bundle = Bundle()
        bundle.putInt(GAME_ID_BUNDLE_KEY, gameId)
        findNavController().navigate(R.id.action_stationsFragment_to_gameInfoDialog, bundle)
        return true
    }
    return super.onOptionsItemSelected(item)
}
...