17

現在、Android アーキテクチャ コンポーネントの を使用していますNavigationが、Navigation Drawer. 出発地ではハンバーガーメニューが表示されますが、他のメニューFragmentsは上向きの矢印が表示されています。navigation_graph間違ってセットアップしたと思います。

ここでは、ホームと設定の 2 つのアイテムを表示している私のナビゲーション ドロワーを見ることができます。これらのフラグメントのいずれかにある場合、ハンバーガー アイコンが表示されます。

ナビ引き出し

ただし、設定フラグメントに移動すると、上矢印が表示されます。

ツールバー

ナビゲーション.グラフ.xml

<?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"
    app:startDestination="@id/nav_home">

    <!-- Start at HomeFragment -->
    <fragment
        android:id="@+id/nav_home"
        android:name=".HomeFragment"
        android:label="@string/home">

        <!-- Navigate to the Search -->
        <action
            android:id="@+id/action_nav_home_to_nav_search"
            app:destination="@id/nav_search" />
    </fragment>


    <fragment
        android:id="@+id/nav_settings"
        android:name=".SettingsFragment"
        android:label="@string/settings">

        <!-- Navigate to the Search -->
        <action
            android:id="@+id/action_nav_settings_to_nav_search"
            app:destination="@id/nav_search" />
    </fragment>



    <fragment
        android:id="@+id/nav_search"
        android:name=".SearchFragment"
        android:label="@string/search" />

</navigation>

HomeFragment何らかの形で関連しているように感じSettingsFragmentますが、それを定義する方法がわかりません.

main_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@id/nav_home"
            android:icon="@drawable/ic_home_white_24dp"
            android:title="@string/home" />

        <item
            android:id="@id/nav_settings"
            android:icon="@drawable/ic_settings_white_24dp"
            android:title="@string/settings" />
    </group>
</menu>

主な活動

そして、 内でMainActivity、このように設定しました。を呼び出しsetupActionBarWithNavControllerましたが、実際にナビ ドロワーを自分でセットアップし、onNavigationItemSelected.

private fun setupNavigation() {
    navController = findNavController(R.id.mainNavigationFragment)
    setupActionBarWithNavController(this, navController, drawer_layout)

    val toggle = ActionBarDrawerToggle(
                this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
        drawer_layout.addDrawerListener(toggle)
        toggle.syncState()

    nav_view.setNavigationItemSelectedListener(this)
}

override fun onNavigationItemSelected(item: MenuItem): Boolean {
    val current = navController.currentDestination.id
    if (item.itemId != current) {
        navController.navigate(item.itemId)
    }

    drawer_layout.closeDrawers()
    return true
}

build.gradle

// Navigation
implementation 'android.arch.navigation:navigation-fragment-ktx:1.0.0-alpha04'
implementation 'android.arch.navigation:navigation-ui-ktx:1.0.0-alpha04'

ありがとう。

4

7 に答える 7

1

必要に応じて、NavController.OnNavigatedListenerを使用し、以下のコードを使用してタイトルを設定できます。

@Override
public void onNavigated(@NonNull NavController controller, @NonNull NavDestination destination) {
    mActivityBinding.toolbar.setTitle(destination.getLabel());
}

ナビゲーション グラフにラベルを設定することを忘れないでください。

于 2018-09-26T13:20:24.097 に答える