Detectar cuando el fragmento se hace visible
¿Por qué no un duplicado? El mensaje sugerido sólo funciona para un viewpager o cuando onResume se llama.
Tengo un listfragment y un detailfragment. El fragmento de detalle se abre cuando se hace clic en un elemento de la lista. Logro esto ocultando el listfragment y mostrando el detailfragment. Cuando el usuario vuelve, vuelve al listfragment.
- Interfaz de paso al fragmento
- Desplazamiento abrupto con NestedScrollView en ViewPager Fragmento dentro de un CoordinatorLayout Android
- ¿Cómo puede manejar el descarte de un DialogFragment (compatibilidad lib) al completar un AsyncTask
- Establecer el estado de BottomSheetDialogFragment a expandido
- Kotlin: no se puede encontrar la clase de símbolo Fragment u otras clases de android
¿Cómo puedo detectar cuando el usuario vuelve a mi fragmento, o cuando mi fragmento es visible?
Tenga en cuenta que me gustaría seguir utilizando .hide () y show () y que estoy buscando un oyente o un onVisible para comprobar cuando el fragmento se hace visible, y no un método para comprobar si es visible.
- ¿Cómo abrir la pestaña particular dentro de Tab Layout en el clic de los elementos del menú de la navegación de cajón?
- FloatingActionButton expandir en una nueva actividad
- FragmentTransaction.replace () transición de fade-in muestra el fragmento "fantasma"
- Guardar y restaurar el estado de la interfaz de usuario del fragmento cuando se empuja y sale del backstack
- Robolectric: ¿Cómo puedo probar una actividad que contiene un SherlockFragment?
- Preload de la vista del fragmento en ViewPager en la primera ejecución
- NPE en Fragment.setUserVisibleHint () cuando se utiliza ViewPager
- Cambiar el color de la barra de estado en el cambio de fragmentos
EDITAR:
Como se señala en los comentarios, setUserVisbileHint()
no se llama automáticamente, sino por el FragmentPageAdapter cuando se utiliza en un ViewPager.
Para el escenario descrito en la pregunta, onHiddenChanged(boolean hidden)
http://developer.android.com/reference/android/app/Fragment.html#onHiddenChanged(boolean) es adecuado.
Como se indica en la documentación, el método se llama cada vez que el fragmento Fragmentos estado cambia, pero no en la configuración inicial del fragmento.
Puede utilizar setUserVisibleHint()
http://developer.android.com/reference/android/support/v4/app/Fragment.html#setUserVisibleHint(boolean)
Si isVisibleToUser
se establece en true
se debe mostrar el fragmento.
Lea sobre el método: Fragmento. es visible()
Ejemplo:
MyFragmentClass test = (MyFragmentClass) getSupportFragmentManager().findFragmentById("myFragnmentID"); if (test != null && test.isVisible()) { //VISIBLE! =) } else { //NOT VISIBLE =( }
Puede enviar un evento a su actividad cuando se inicia el fragmento: https://www.inkling.com/read/programming-android-mednieks-1st/chapter-11/visualizing-the-fragment-life
Anulando el método onStart:
@Override public void onStart() { super.onStart(); ((MyInterface)getActivity()).onFragmentIsVisible( this ); }
Donde MyInterface
es una interfaz:
public MyInterface { public void onFragmentVisible( Fragment fragment ); }
Y su actividad tendrá que implementarlo.
Esto podría ser más fácil con una biblioteca de bus de eventos como
- Bus de eventos de RoboGuice
- Otón
- EventBus
- ¿Cómo puedo evitar la ejecución de onTextChanged en el EditText de Android
- Problemas de liberación del micrófono interno