Cuando muestro un fragmento (que es pantalla completa con #77000000
fondo) sobre otro fragmento (llamémoslo principal), mi fragmento principal aún reacciona a los clics (podemos hacer clic en un botón incluso si no lo vemos).
Pregunta : ¿cómo evitar los clics en el primer fragmento (principal)?
EDITAR
Desafortunadamente, no puedo ocultar el fragmento principal, porque estoy usando un fondo transparente en el segundo fragmento (por lo tanto, el usuario puede ver qué se encuentra detrás).
android
android-fragments
Dmitry Zaytsev
fuente
fuente
Visibility
de tumain
Fragment
aGONE
cuando no lo esté utilizando.onClick
método no devuelve nada. Pero da una idea, gracias (publicaré la respuesta pronto).Respuestas:
Establezca la
clickable
propiedad en la vista del segundo fragmento como verdadera. La vista capturará el evento para que no se pase al fragmento principal. Entonces, si la vista del segundo fragmento es un diseño, este sería el código:fuente
RelativeLayout
fragmento dentro y configuro toda la vista con laclickeable
propiedad. La solución de @Dmitry resuelve mi problema.La solución es bastante simple. En nuestro segundo fragmento (que se superpone a nuestro fragmento principal) solo necesitamos capturar el
onTouch
evento:fuente
Simplemente agregue
clickable="true"
yfocusable="true"
al diseño principalSi está utilizando
AndroidX
, intente estofuente
focuseable
No es realmente necesario.focusable="true"
aquí es solo para evitar una advertencia en Android Studio.Debe ocultar el primer fragmento cuando muestre el segundo Fragmento si se colocan dos fragmentos en la misma vista de contenedor.
fuente
Necesitas agregar
android:focusable="true"
conandroid:clickable="true"
Clickable
significa que un dispositivo puntero puede hacer clic en él o un dispositivo táctil.Focusable
significa que puede obtener el foco de un dispositivo de entrada como un teclado. Los dispositivos de entrada como los teclados no pueden decidir a qué vista enviar sus eventos de entrada en función de las entradas mismas, por lo que los envían a la vista que tiene el foco.fuente
Hay más de una solución que algunos de nosotros contribuimos a este hilo, pero también me gustaría mencionar otra solución. Si no le gusta, hacer clic y enfocar es igual a True ViewGroup raíz de cada diseño en XML como yo. También puede ponerlo en su base si tiene uno como el siguiente;
Espero que sea útil para los que odian los XML de diseño.
fuente
La respuesta aceptable "funcionará", pero también causará un costo de rendimiento (sobregiro, volver a medir el cambio de orientación) ya que el fragmento en la parte inferior todavía se está dibujando. Tal vez debería simplemente encontrar el fragmento por etiqueta o ID y establecer la visibilidad en GONE o VISIBLE cuando necesite mostrar de nuevo.
En Kotlin:
Esta solución es preferible a la alternativa
hide()
y losshow()
métodos deFragmentTransaction
cuando utiliza animaciones. Que acaba de llamar desde elonTransitionStart()
yonTransitionEnd()
deTransition.TransitionListener
.fuente
Método 1:
Puede agregar a todos los fragmentos de diseño
Método 2: (mediante programación)
Extienda todos los fragmentos de
FragmentBase
etc. Luego agregue este código aFragmentBase
fuente
Lo que puede hacer es dar un clic en blanco al diseño del fragmento anterior utilizando la propiedad onClick para el diseño principal de ese fragmento principal y, en la actividad, puede crear una función
doNothing(View view)
y no escribir nada en él. Esto lo hará por ti.fuente
Esto suena como un caso para DialogFragment. De lo contrario, con Fragment Manager, confirme uno para ocultar y el otro para mostrar. Eso ha funcionado para mi.
fuente
La adición de
android:clickable="true"
no funcionó para mí. Esta solución no funciona en CoordinatorLayout cuando es un diseño primario. Es por eso que hice RelativeLayout como diseño principal, lo agreguéandroid:clickable="true"
y coloqué CoordinatorLayout en este RelativeLayout.fuente
Tenía múltiples fragmentos con el mismo xml.
Después de pasar horas, me quité
setPageTransformer
y comenzó a funcionarTenía una lógica de escalamiento.
fuente