webentwicklung-frage-antwort-db.com.de

Jetpack-Navigation: Titel und Rück-/Aufwärtspfeil in der Aktionsleiste?

Ich habe die neueste kanarische Version von Android Studio installiert und folgte dieser Anweisung ( https://developer.Android.com/topic/libraries/architecture/navigation/navigation-implementing ), um eine einfache zweiseitige Navigation zu implementieren. Grundsätzlich hat page1 eine Schaltfläche, und wenn auf diese geklickt wird, zeigt die App page2.

Es funktioniert, aber es gibt ein Problem ... Es scheint nichts mit der Aktionsleiste zu tun. Soll der Pfeil nach oben/hinten und das Attribut "Beschriftung" in der Aktionsleiste automatisch von der Navigationsbibliothek angezeigt werden? Oder soll ich die Arbeit wie zuvor manuell erledigen? Ich möchte den hinteren Pfeil und "Details" in der Aktionsleiste (Werkzeugleiste) anzeigen, wenn Seite2 angezeigt wird.

Klicken Sie auf die Schaltfläche auf Seite 1.

override fun onViewCreated(view: View, savedInstanceState: Bundle?)
{
    button1.setOnClickListener {
        val nav = NavHostFragment.findNavController(this);
        nav.navigate(R.id.show_page2)
    }
}

Hauptaktivität XML. Standardmäßig war dies die Standard-Aktionsleiste. Ich habe sie durch eine Toolbar ersetzt. Es gab keinen Unterschied.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.appcompat.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_height="?attr/actionBarSize"
        Android:elevation="4dp"
        Android:background="?attr/colorPrimary"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        Android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        Android:layout_width="match_parent">
    </androidx.appcompat.widget.Toolbar>

    <fragment
        Android:id="@+id/my_nav_Host_fragment"
        Android:name="androidx.navigation.fragment.NavHostFragment"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/toolbar"
        app:navGraph="@navigation/nav_graph"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Nav-Diagramm 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"
            Android:id="@+id/nav_graph"
            app:startDestination="@id/page1">

    <activity
        Android:id="@+id/mainActivity2"
        Android:name="com.Android.navtest.MainActivity"
        Android:label="activity_main"
        tools:layout="@layout/activity_main"/>
    <fragment
        Android:id="@+id/page1"
        Android:name="com.Android.navtest.BlankFragment2"
        Android:label="Home page"
        tools:layout="@layout/page1">
        <action
            Android:id="@+id/show_page2"
            app:destination="@id/page2"
            app:enterAnim="@anim/anim1"
            app:popExitAnim="@anim/anim2"/>
    </fragment>
    <fragment
        Android:id="@+id/page2"
        Android:name="com.Android.navtest.BlankFragment"
        Android:label="Details"
        tools:layout="@layout/page2"/>
</navigation>
4
Damn Vegetables

Sie können Ihre ActionBar mit NavigationUI.setupActionBarWithNavController() an einen NavController anschließen. Dies geschieht in der Regel in Ihrer Aktivität direkt nach dem Aufruf von setSupportActionBar():

supportActionBar = findViewById<Toolbar>(R.id.toolbar)

// Get the NavController for your NavHostFragment
val navController = findNavController(R.id.nav_Host_fragment)

// Set up the ActionBar to stay in sync with the NavController
setupActionBarWithNavController(navController)

Dieser Ansatz wird im Navigationsgespräch bei Google I/O 2018 behandelt.

13
ianhanniballake

Wenn Sie die Schaltfläche "Zurück zur Navigation" an mehreren Stellen verbergen möchten (standardmäßig nur für das Home-Fragment), können Sie der AppBarConfiguration IDs von Fragmenten hinzufügen und diese als zweiten Parameter von setupActionBarWithNavController übergeben.

val appBarConfiguration = AppBarConfiguration(setOf(R.id.splashFragment, R.id.onboardingFragment, R.id.homeFragment))

setupActionBarWithNavController(findNavController(R.id.nav_Host), appBarConfiguration)
2
Rafols

das habe ich getan

private lateinit var appBarConfiguration: AppBarConfiguration

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: ActivityGameConfigBinding =
            DataBindingUtil.setContentView(this, R.layout.activity_game_config)
        supportActionBar?.show()

        val navController = Navigation.findNavController(this, R.id.myNavHostFragment)
        NavigationUI.setupActionBarWithNavController(this, navController, null)
        appBarConfiguration = AppBarConfiguration.Builder(navController.graph)
            .build()

        NavigationUI.setupWithNavController(binding.navView, navController)
    }
    override fun onSupportNavigateUp(): Boolean {
        val navController = Navigation.findNavController(this, R.id.myNavHostFragment)
        return NavigationUI.navigateUp(navController, appBarConfiguration)
    }
0
nima moradi