android - with - La llamada de ViewPager setUserVisibleHint después de que se carga el primer Fragmento
tablayout without fragments (6)
En mi aplicación, tengo una ViewPager que contiene muchas pestañas deslizables con Fragmentos dentro. Utilizo el método setUserVisibleHint
para detectar cuando un Fragment
entra en la pantalla. Esto funciona muy bien cuando el usuario pasa de una pestaña a otra pero no funciona en la primera carga. Para ejecutar el código en el método, tengo que deslizar hacia la izquierda y luego hacia atrás al primer Fragment
porque se llama al método onCreateView
antes del método onCreateView
.
¿Tiene alguna idea de cómo puedo ejecutar este código después de que el primer Fragmento esté visible? ¿Hay algún método en ViewPager
u otra cosa?
Bueno, su solución más, y tal vez es mejor configurar OnPageChangeListener
, pero funciona para mí. La tarea es determinar si el fragmento actual es visible en la creación. Puedes usar el menú para hacer esto. En tu 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 encuentre útil. Esto funciona para mí
Compruebo tu problema, pero onCreateView
que se llama al método setUserVisibleHint
antes del método setUserVisibleHint
enter code here
porque se llama al método setUserVisibleHint antes del método onCreateView
No entiendo exactamente lo que necesita, pero puede detectar la página del fragmento actual llamando a ViewPager.getCurrentItem
que devuelve un entero.
Espero eso ayude.
Buena suerte.
No puede (y no debe) confiar en setUserVisibleHint
para esto. En su lugar, debe usar 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 usar ViewPager.SimpleOnPageChangeListener
si no necesita escuchar todas las devoluciones de llamada.
Actualizar
setOnPageChangeListener
método setOnPageChangeListener
ahora está en desuso, use addOnPageChangeListener
en addOnPageChangeListener
lugar
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// do your work
}
});
mViewPagerListener.onPageSelected(0);
llamar manualmente mViewPagerListener.onPageSelected(0);
en onCreateView
en su actividad / fragmento raíz.
ABAJO TRABAJADO PARA MÍ
Por favor 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 usa 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)
{
onResume();
}
}
y en el método OnResume
@Override
public void onResume() {
super.onResume();
if (!getUserVisibleHint()) {
return;
}
//do your stuff here
}