studio sirven que para onattach onactivitycreated navegar los fragments example entre eliminar diferencia destruir actualizar activity android android-fragments

android - sirven - ¿Cómo saber si un fragmento es visible?



onattach android (8)

Estoy usando la biblioteca de soporte v4 y mis preguntas son, ¿cómo saber si un fragmento es visible? y ¿Cómo puedo cambiar las propiedades del Diseño inflado en el Fragmento? Gracias por adelantado.

---Editar---

Estoy usando fragmentos como en el tutorial de desarrolladores de Android con FragmentActivity


Debería poder hacer lo siguiente:

MyFragmentClass test = (MyFragmentClass) getSupportFragmentManager().findFragmentByTag("testID"); if (test != null && test.isVisible()) { //DO STUFF } else { //Whatever }


Puede anular setMenuVisibility de esta manera:

@Override public void setMenuVisibility(final boolean visible) { if (visible) { //Do your stuff here } super.setMenuVisibility(visible); }


Si quieres saber cuándo el uso está mirando el fragmento debes usar

yourFragment.isResumed()

en lugar de

yourFragment.isVisible()

En primer lugar, isVisible() ya verifica isAdded() por lo que no es necesario llamar a ambos. Segundo, ninguno de estos dos significa que el usuario realmente está viendo tu fragmento. Solo isResumed() se asegura de que su fragmento esté delante del usuario y el usuario puede interactuar con él si eso es lo que está buscando.


Tanto isVisible() como isAdded() devuelven true tan pronto como se crea el Fragment , y ni siquiera es realmente visible. La única solución que realmente funciona es:

if (isAdded() && isVisible() && getUserVisibleHint()) { ... do your thing }

Esto hace el trabajo. Período.


Una cosa a tener en cuenta, es que isVisible() devuelve el estado visible del fragmento actual . Hay un problema en la biblioteca de soporte, donde si tiene fragmentos anidados y oculta el fragmento principal (y, por lo tanto, todos los elementos secundarios), el niño aún dice que está visible.

isVisible() es final, por lo que no puede anular desafortunadamente. Mi solución fue crear una clase BaseFragment que extienden todos mis fragmentos y luego crear un método como ese:

public boolean getIsVisible() { if (getParentFragment() != null && getParentFragment() instanceof BaseFragment) { return isVisible() && ((BaseFragment) getParentFragment()).getIsVisible(); } else { return isVisible(); } }

Hago isVisible() && ((BaseFragment) getParentFragment()).getIsVisible(); porque queremos devolver falso si alguno de los fragmentos principales está oculto.

Esto parece hacer el truco para mí.


puedes intentarlo de esta manera:

Fragment currentFragment = getFragmentManager().findFragmentById(R.id.fragment_container);

o

Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);

En este si, comprueba si currentFragment es instancia de YourFragment

if (currentFragment instanceof YourFragment) { Log.v(TAG, "your Fragment is Visible"); }


getUserVisibleHint() aparece como verdadero solo cuando el fragmento está en la vista y es visible