【发布时间】:2019-05-21 16:52:20
【问题描述】:
我一直在搞乱 Jetpack 导航组件,我创建了一个使用导航抽屉的活动。
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)
}
这符合我的预期,但随后我为设置屏幕添加了global action。
<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,结果相同。
如何让导航组件在选择全局操作后正确保存其状态?
【问题讨论】:
标签: android kotlin android-jetpack android-navigationview android-jetpack-navigation