Fragmento sobre otro fragmento de problema

Cuando estoy mostrando un fragmento (que es pantalla completa con #77000000 fondo #77000000 ) sobre otro fragmento (llamémoslo principal), mi fragmento principal aún reactjs a los clics (podemos hacer clic en un botón aunque no lo veamos).

Pregunta : ¿cómo evitar clics en el primer fragmento (principal)?

EDITAR

Lamentablemente, no puedo simplemente ocultar el fragmento principal, porque estoy usando un fondo transparente en el segundo fragmento (para que el usuario pueda ver lo que se encuentra detrás).

Establecer propiedad clickable en la vista del segundo fragmento en verdadero. La vista atrapará 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:

  

La solución es bastante simple. En nuestro segundo fragmento (que se superpone a nuestro fragmento principal) solo debemos detectar el evento onTouch :

 @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstance){ View root = somehowCreateView(); /*here is an implementation*/ root.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { return true; } }); return root; } 

Debería ocultar el primer fragmento cuando muestre el segundo Fragmento si se colocan dos fragmentos en la misma vista de contenedor.

Si desea saber más preguntas sobre cómo resolver problemas sobre Fragment, puede ver mi biblioteca: https://github.com/JustKiddingBaby/FragmentRigger

 FirstFragment firstfragment; SecondFragment secondFragment; FragmentManager fm; FragmentTransaction ft=fm.beginTransaction(); ft.hide(firstfragment); ft.show(secondFragment); ft.commit(); 

Simplemente agregue clickable="true" y focusable="true" al diseño principal

     

Esto suena como un caso para DialogFragment. De lo contrario, con Fragment Manager confirma uno para ocultar y el otro para mostrar. Eso ha funcionado para mi.

La adición de android:clickable="true" no funcionó para mí. Esta solución no funciona en CoordinatorLayout cuando se trata de un diseño principal. Es por eso que hice RelativeLayout como diseño principal, agregué android:clickable="true" y coloqué CoordinatorLayout en este RelativeLayout.

La respuesta aceptable “funcionará”, pero también causará un costo de rendimiento (sobregiro, nueva medición del cambio de orientación) ya que el fragmento en la parte inferior aún 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 volver a mostrar.

En Kotlin:

 fragmentManager.findFragmentByTag(BottomFragment.TAG).view.visibility = GONE 

Esta solución es preferible a los métodos alternativos hide() y show() de FragmentTransaction cuando usa animaciones. Simplemente lo llama desde onTransitionStart() y onTransitionEnd() de Transition.TransitionListener .

Tuve múltiples fragmentos con el mismo xml.
Después de pasar horas, setPageTransformer y comenzó a funcionar

  // viewpager.setPageTransformer(false, new BackgPageTransformer()) 

Tenía una lógica de escalado.

 public class BackgPageTransformer extends BaseTransformer { private static final float MIN_SCALE = 0.75f; @Override protected void onTransform(View view, float position) { //view.setScaleX Y } @Override protected boolean isPagingEnabled() { return true; } } 

Lo que puede hacer es dar un clic en blanco al diseño del fragmento anterior al usar la propiedad onClick para el diseño principal de ese fragmento principal y en la actividad puede crear una función no hacer nada doNothing(View view) y no escribir nada en ella. Esto lo hará por ti.

La mejor forma es utilizar FrameLayout. Lo estoy usando para fragmentar, así que no es necesario declarar Fragmentos en otro Xml.