estoy usando Fragmento de diálogo de hoja inferior para mostrar algunas configuraciones personalizadas.
Requisito:
Cuando hago clic en cualquier pestaña en BottomSheetDialogFragment, reemplazo el fragmento y lo agrego a backstack para que cuando el usuario haga clic en la acción onBackPress o Up, debería volver al fragmento de la última configuración de BottomSheetDialogFragment.
Quiero usar el componente de arquitectura de navegación para simplificar mis transacciones.
Problema: si uso el componente de arquitectura de navegación para navegar desde FragmentA hasta BottomSheetDialogFragment, recibo el siguiente error.
java.lang.IllegalStateException: el diálogo no debe ser nulo BottomSheetDialogFragment
No sé cómo instanciar BottomSheetDialogFragment usando el Componente de Arquitectura de Navegación y usando el siguiente código no tendrá una pila de mantenimiento usando el Componente de Arquitectura de Navegación.
BottomSheetDialogFragment.show(FragmentManager manager, String tag)
En la versión del componente de navegación 2.1.0-alpha04
, Navigation Graph
puede contener dialog
como uno de los destinos.
<?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/main_navigation"
app:startDestination="@id/startFragment">
<fragment
android:id="@+id/loginFragment"
android:name="com.awesomeproject.android.authentication.login.LoginFragment"
android:label="Login"
tools:layout="@layout/login_fragment" />
<dialog
android:id="@+id/bottomSheet"
android:name="com.awesomproject.android.BottomSheetFragment"
tools:layout="@layout/bottom_sheet_dialog_fragment" />
</navigation>
El BottomSheetFragment se verá similar a otro BottomSheet.
class BottomSheetFragment : BottomSheetDialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View =
inflater.inflate(R.layout.bottom_sheet_dialog_fragment, container, false)
}
Entonces puedes tratar bottomSheet
de la misma manera que otros destinos. Puede navegar a este destino o pasar safeArgs
en.
¡Salud!
-
Intenté esto, pero cuando trato de navegar desde el cuadro de diálogo usando la navegación, falta NavController. ¿Puede compartir el código de navegación del cuadro de diálogo con otros fragmentos o cuadros de diálogo? @Boonya
– Anmol
18 de junio de 2019 a las 11:02
-
con esta solución, la hoja inferior se muestra en otro fragmento, no sombrea el fragmento actual que lo llama
– AndroLife
29 de septiembre de 2019 a las 0:02
-
Oh hombre, fue aterrador cuando agregué BottomSheet con navegación cuando se abrió en pantalla completa. Pero me ahorras tiempo. Fue fácil simplemente cambiar el diálogo de un fragmento.
– Pranav P.
8 de enero de 2020 a las 5:01
-
@AndroLife, ¿conoces la solución para ese problema?
– Ralph
21 de enero de 2021 a las 14:45
-
@AndroLife FWIW Veo un comportamiento correcto con el material 1.4.0 y la navegación 2.3.5
– tir38
25 de septiembre de 2021 a las 16:58
Hola @anmol, obtuviste alguna solución para esto porque estoy tratando de hacer lo mismo
– Hemant Sangle
26 de marzo de 2019 a las 6:40
Traté de hacerlo de una manera diferente mira este proyecto de demostración github.com/andor201995/NavigationDemo @HemantSangle
– Anmol
26 de marzo de 2019 a las 12:08
ok revisare el link
– Hemant Sangle
26 de marzo de 2019 a las 12:11
Construiré una respuesta adecuada y la publicaré aquí. @HemantSangle
– Anmol
26 de marzo de 2019 a las 12:15
Eso será grandioso
– Hemant Sangle
26 de marzo de 2019 a las 12:47