web-dev-qa-db-ja.com

ナビゲーショングラフの最初の画面のツールバーに戻るボタンを表示する

私はandroidxナビゲーションコンポーネントを試してみて、ツールバーコンテナーで私の活動を設定しました。これは、内部のナビゲーション/ステップがたくさんあるアプリの断続的な画面の1つでこれを実行しており、Archコンポーネントをこれで試してみることができると思いました。

これは断続的な画面なので、最初の画面自体からツールバーに戻るボタンを表示したいと思います。

HostアクティビティのonCreate()メソッドで以下のコードを使用してツールバーをすでに設定しています。

 setSupportActionBar(toolbar);
 if (getSupportActionBar() != null) {
   getSupportActionBar().setDisplayHomeAsUpEnabled(true);
   getSupportActionBar().setDisplayShowHomeEnabled(true);
 }
NavigationUI.setupActionBarWithNavController(this, navHostFragment.getNavController());

グラフの2番目の画面に戻るボタン/戻る矢印が表示されますが、最初の画面には表示されません。

<?xml version="1.0" encoding="utf-8"?>
<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/navigation"
    app:startDestination="@id/listing">

    <fragment
        Android:id="@+id/listing"
        Android:name=".ui.ItemsListingFragment"
        Android:label="Items"
        tools:layout="@layout/items_listing" >
        <action
            Android:id="@+id/listToQuantity"
            app:destination="@id/quantity"
           />
        <action
            Android:id="@+id/listToReason"
            app:destination="@id/reason"
            />
    </fragment>
    <fragment
        Android:id="@+id/quantity"
        Android:name=".ui.ItemQuanitySelectionFragment"
        Android:label="Items"
        tools:layout="@layout/fragment_item_quanity_selection" >
        <action
            Android:id="@+id/quantityToReason"
            app:destination="@id/reason"
            />
    </fragment>
    <fragment
        Android:id="@+id/reason"
        Android:name=".ui.ItemReasonFragment"
        Android:label="Items"
        tools:layout="@layout/fragment_item_reason">
    </fragment>
</navigation>

ツールバーに戻るボタンを最初のステップから追加するために、さらに変更が必要です。

5
Abhiroop

setUpActionBarWithNavCntrollerを呼び出すときは、次のように関数onSupportNavigateUpをオーバーライドする必要があります。

override fun onSupportNavigateUp(): Boolean {
    return findNavController(R.id.navHostFragment).navigateUp() 
            || super.onSupportNavigateUp()
}
0
Devansh Maurya