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?
- Viewpager setCurrentItem no cambiar tablayout seleccionado color
- ViewPager en DialogFragment - IllegalStateException: Fragmento no tiene una vista
- Implementación correcta de PagerAdapter en Android
- Cómo establecer el tamaño de ViewPager
- Android Fragment Pager y el indicador de página personalizada (ViewPagerIndicator creado por Jake Wharton)
- Acceda a la vista de fragmentos de padres de ViewPager en el fragmento secundario de Pager
- ViewPager da fuera del error de memoria
- IllegalArgumentException: el radio debe ser> 0
- ¿Cómo puedo usar View pager con touchimageview?
- Cómo cargar datos de fragmentos sólo cuando se hace clic en su pestaña en PagerSlidingTabStrip
- NullPointerException en FrameLayout.onMeasure ()
- ViewPager en DialogFragment, IllegalStateException: Fragmento no tiene una vista
- Cómo no repetir el objeto instantiateItem () en PagerAdapter en android
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
- Cómo acceder a variables de actividad de un fragmento Android
- ¿Cómo puedo crear mis propiedades personalizadas en xml para Android?