Навигация Просмотр глобального действия Назад Состояние
Я возился с компонентом Jetpack Navigation и создал действие, которое использует навигационный ящик.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navigationController = findNavController(R.id.navigationHostFragment)
navigationView.setupWithNavController(navigationController)
val appBarConfiguration = AppBarConfiguration(TOP_LEVEL_DESTINATIONS, drawerLayout)
toolbar.setupWithNavController(navigationController, appBarConfiguration)
}
override fun onSupportNavigateUp(): Boolean =
NavigationUI.navigateUp(findNavController(R.id.navigationHostFragment), drawerLayout)
}
Это работает, как я ожидал, но затем я добавил глобальное действие для экрана настроек.
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
app:startDestination="@id/appBarFragment">
...
<activity android:id="@+id/settingsActivity"
android:name="com.example.app.ui.SettingsActivity"
android:label="@string/title_settings"/>
<action android:id="@+id/settingsAction"
app:destination="@+id/settingsActivity"/>
</navigation>
И ссылаться на действие в NavigationView
меню.
<menu xmlns:android="http://schemas.android.com/apk/res/android">
...
<group android:id="@+id/navigationGroupSettings">
<item android:id="@+id/aboutAction"
android:title="@string/title_about"
android:icon="@drawable/ic_info_black_24dp"/>
<item android:id="@+id/settingsAction"
android:title="@string/title_settings"
android:icon="@drawable/ic_settings_black_24dp"/>
</group>
</menu>
Это отображает SettingsActivity
, но когда я нажимаю кнопку возврата, чтобы вернуться к MainActivity
отображается первый пункт назначения, а не предыдущий пункт назначения. Хотя NavigationView
правильно сохраняет свое состояние и проверяет последний пункт назначения (вместо первого элемента в списке).
Я также попытался заменить SettingsActivity
с SettingsFragment
с тем же результатом.
Как заставить компонент навигации правильно сохранять свое состояние после выбора глобального действия?
1 ответ
В соответствии с onNavDestinationSelected()
документация (именно так NavigationUI вызывает пункты меню):
По умолчанию задний стек будет возвращен к месту назначения навигационного графика. Пункты меню, которые имеют
android:menuCategory="secondary"
не выскочит задний стек.
Поэтому вы можете добавить android:menuCategory="secondary"
к вашему пункту меню, если вы хотите избежать выталкивания других пунктов назначения из стека при выборе пункта назначения настроек.