ViewPager llamada setUserVisibleHint después de que se carga el primer fragmento

En mi aplicación, tengo un ViewPager que contiene muchas pestañas deslizables con fragmentos dentro. Utilizo el método setUserVisibleHint para detectar cuando un Fragment viene a la pantalla. Esto funciona muy bien cuando el usuario pasa entre las fichas pero no funciona en la primera carga. Para ejecutar el código en el método que tengo que deslizar a la izquierda y luego volver al primer Fragment porque el método setUserVisibleHint se llama antes de que el método onCreateView .

¿Tiene alguna idea de cómo puedo ejecutar este código después de que el primer fragmento es visible? ¿Hay un método en ViewPager o algo más?

No puede (y no debe) confiar en setUserVisibleHint para esto. En su lugar, debe utilizar un ViewPager.OnPageChangeListener para obtener devoluciones de llamada cuando una página se vuelve visible. P.ej

 viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { // do your work } }); 

Nota : Puede utilizar ViewPager.SimpleOnPageChangeListener si no necesita escuchar todas las devoluciones de llamada.

Actualizar

setOnPageChangeListener método setOnPageChangeListener está obsoleto, use addOnPageChangeListener

 viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { // do your work } }); 

Usted tiene que llamar manualmente mViewPagerListener.onPageSelected(0); onCreateView en su actividad raíz / fragmento.

ABAJO TRABAJÓ PARA MÍ

Crea una vista global como esta

 View view; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //inflate view layout view =inflater.inflate(R.layout.your_fragment, container, false); // return view return view; } 

Y usar esto

 @Override public void setUserVisibleHint(boolean isUserVisible) { super.setUserVisibleHint(isUserVisible); // when fragment visible to user and view is not null then enter here. if (isUserVisible && view != null) { // do your stuff here. } } 

No entiendo exactamente lo que necesitas, pero puedes detectar la página del fragmento actual llamando a ViewPager.getCurrentItem que devuelve entero.

Espero eso ayude.

Buena suerte.

Bueno, su solución más, y tal vez es mejor para configurar OnPageChangeListener , pero funciona para mí. La tarea consiste en determinar si el fragmento actual es visible en la creación. Puede utilizar el menú para hacer esto. En su fragmento:

  @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); // set current fragment has its own options menu } 

y esto

  @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { ... if(isMenuVisible()) { // menu should be visible if current fragment is visible right now setUserVisibleHint(true); // manually set value to true } ... return view; 

Tal vez alguien lo encontrará útil. Esto funciona para mí.

Compruebo su problema, pero descubro que el método onCreateView se llama antes del método setUserVisibleHint

 enter code here 

Porque el método setUserVisibleHint se llama antes del método onCreateView

  • Android ViewPager con ScrollViews con ViewPagers dentro de ScrollViews
  • Actualizar / Recargar / Re instanciar un fragmento en un sistema de pestañas android
  • ViewPager se desplaza programáticamente
  • Deshabilitar y habilitar la paginación en ViewPager en Android
  • Error al inflar TextInputLayout cuando se utiliza con ViewPager
  • ViewPager funciona bien en la primera vez, pero en la recarga de nuevo, recibiendo el error java.lang.IllegalStateException?
  • ViewPager dentro de ListView
  • Android: ViewPagerIndicator - Creación de diferentes diseños para diferentes páginas
  • ViewPager, PagerAdapter y Bitmap causan pérdida de memoria (OutOfMemoryError)
  • ViewPager y FragmentPagerAdapter con fragmentos (no la biblioteca de soporte)
  • Obtención del error "La actividad Java.lang.IllegalStateException se ha destruido" al utilizar pestañas con ViewPager
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.