Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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?

  • HorizontalScrollView o Carrousel?
  • Cómo conservar el estado de ViewPager dentro de un RecyclerView?
  • ViewPager dentro de la fila ListView impide que onItemClick sea despedido
  • Desafío: Animación personalizada de ViewPager. Cambiar la altura de los elementos elegidos (Ver doble)
  • ¿Cómo obtengo el niño Vista de un ViewPager en un elemento determinado
  • FragmentPagerAdapter con ViewPager y dos Fragmentos. Ir a la primera de la segunda y actualizar el primer texto
  • Fragmentos en ViewPager se recrean
  • Android.app Fragments vs. android.support.v4.app usando ViewPager?
  • 6 Solutions collect form web for “ViewPager llamada setUserVisibleHint después de que se carga el primer fragmento”

    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

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.