es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo implementar la navegación inferior con gráfico de navegación mientras se mantienen los estados de pestañas.

Tengo 5 elementos de menú en la navegación inferior, supongamos (A,B,C,D,E).
He definido el gráfico de navegación para cada uno de estos elementos de menú.

Digamos que estoy en la pestaña B de la navegación inferior y realizo algunos clics y ahora navega hacia una acción definida en el gráfico de navegación B y se dirige a B.1, dentro de la pestaña actual B. Así que la pantalla actual es B.1.

Ahora, si hago clic en la pestaña A de la navegación inferior, se abre la pestaña A.

¿Qué quiero lograr?
1. Ahora, si presiono el botón de retroceso, debería ir a B.1.
2. Si hago clic en la pestaña B de la navegación inferior, debería mostrarme la pantalla anterior que es B.1 (actualmente está creando un nuevo fragmento para B).

Versiones de navegación probadas:

nav_version_ktx = “2.4.0-alpha01” y
nav_version_ktx = “2.3.5”

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el comportamiento deseado, puedes seguir los siguientes pasos:

    1. En el gráfico de navegación para la pestaña B, define una acción para navegar a B.1 cuando se presione el botón de retroceso. Puedes hacer esto seleccionando el fragmento B y agregando una acción que apunte a B.1 con el atributo app:popUpTo=”B”.
    2. Para evitar crear un nuevo fragmento para B, puedes usar el atributo app:launchSingleTop=”true” en el gráfico de navegación. Esto garantizará que si el usuario selecciona la misma pestaña nuevamente, no se creará una nueva instancia del fragmento, sino que se reutilizará la existente.

    Código de ejemplo:

    <!-- gráfico de navegación para la pestaña B -->
    <navigation android:id="@+id/nav_graph_B" app:startdestination="@id/B">
        <fragment android:id="@+id/B" android:name="com.example.MyFragmentB" android:label="B">
            <action android:id="@+id/action_B_to_B1" app:destination="@id/B1" app:popupto="B"></action>
        </fragment>
        <fragment android:id="@+id/B1" android:name="com.example.MyFragmentB1" android:label="B1"></fragment>
    </navigation>
    
    <!-- bottom navigation view -->
    <com.google.android.material.bottomnavigation.bottomnavigationview android:id="@+id/bottom_navigation_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/windowBackground" app:itemiconsize="28dp" app:menu="@menu/bottom_navigation_menu" app:labelvisibilitymode="labeled" app:layout_constraintbottom_tobottomof="parent" app:layout_constraintleft_toleftof="parent" app:layout_constraintright_torightof="parent"></com.google.android.material.bottomnavigation.bottomnavigationview>
    
    // código de la actividad
    val bottomNavigationView: BottomNavigationView = findViewById(R.id.bottom_navigation_view)
    val navController = findNavController(R.id.nav_host_fragment)
    bottomNavigationView.setupWithNavController(navController)
    

    Asegúrate de haber agregado el setupWithNavController en el código de tu actividad.

    Con esto deberías lograr el comportamiento deseado que deseas.

Comments are closed.