3

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が、同じ結果になりました。

グローバル アクションが選択された後、ナビゲーション コンポーネントの状態を正しく保存するにはどうすればよいですか?

4

1 に答える 1

4

onNavDestinationSelected()ドキュメントに従って( NavigationUIがメニュー項目をトリガーする方法です):

デフォルトでは、バック スタックはナビゲーション グラフの開始デスティネーションに戻されます。を持っているメニュー項目はandroid:menuCategory="secondary"、バック スタックをポップしません。

したがってandroid:menuCategory="secondary"、設定の宛先を選択するときにスタックから他の宛先をポップしたくない場合は、メニュー項目に追加できます。

于 2019-05-21T16:59:54.680 に答える