Si hallas algún error en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes subir el código al proyecto final.
Solución:
Acaban de cambiar la API en Fragmentos.
Si usa este método para limitar el ciclo de vida de los fragmentos:
Ahora puede establecer un estado de ciclo de vida máximo para un fragmento llamando a setMaxLifecycle() en una FragmentTransaction. Esto reemplaza el ahora obsoleto setUserVisibleHint().
Fuente: https://developer.android.com/jetpack/androidx/releases/fragment#1.1.0-alpha07.
Si necesita este método porque intenta detectar qué fragmento está visible actualmente en ViewPager
. Ahora puedes simplemente usar onResume
y onPause
en su lugar, pero antes de eso, debe cambiar el comportamiento predeterminado en FragmentPagerAdapter
constructor.
Como esto:
FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
Ahora en AndroidX
método setUserVisibleHint(boolean isVisibleToUser)
está en desuso y si echa un vistazo a la documentación, dice:
Ahora puede establecer un máximo
Lifecycle
estado para un Fragmento llamando
setMaxLifecycle()
en unFragmentTransaction
. Esto reemplaza el ahora obsoletosetUserVisibleHint()
.FragmentPagerAdapter
y
FragmentStatePagerAdapter
tenga un nuevo constructor que le permita cambiar al nuevo comportamiento.
Entonces, básicamente, cuando usas este enfoque en FragmentTransaction
:
.getSupportFragmentManager()
.beginTransaction()
.setMaxLifecycle(fragment, Lifecycle.State.STARTED);
sería equivalente a setUserVisibleHint(false)
y:
.getSupportFragmentManager()
.beginTransaction()
.setMaxLifecycle(fragment, Lifecycle.State.RESUMED);
sería equivalente a: setUserVisibleHint(true)
Esta respuesta asume que estás usando FragmentStatePagerAdapter
En la nueva versión de androidx.fragment
(desde 1.1.0+), Fragment.setUserVisibleHint
seguirán siendo llamados si su FragmentStatePagerAdapter
está usando el comportamiento anterior, especificado por BEHAVIOR_SET_USER_VISIBLE_HINT
.
Si ha construido su FragmentStatePagerAdapter
y pasó BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
después Fragment.setUserVisibleHint
ya no se llamará dentro FragmentStatePagerAdapter.instantiateItem
.
NOTA: todavía puedes llamar a los obsoletos Fragment.getUserVisibleHint
si has especificado BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
en tus FragmentStatePagerAdapter
pero tenga en cuenta que volverá true
a pesar de Fragment.isResumed()
regresará false.
los androidx
proyecto es de código abierto. Al echar un vistazo al código más reciente en el maestro, puede ver que un if
se ha agregado alrededor setUserVisibleHint
en el interior instantiateItem
: https://android.googlesource.com/platform/frameworks/support/+/androidx-master-dev/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStatePagerAdapter.java#195
TL;RD:
1.0.x:
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
1.1.0+:
fragment.setMenuVisibility(false);
if (mBehavior == BEHAVIOR_SET_USER_VISIBLE_HINT)
fragment.setUserVisibleHint(false);
Si te mola el tema, puedes dejar un ensayo acerca de qué le añadirías a este artículo.