Actualmente estoy desarrollando una aplicación de tableta que usa intensamente el widget ViewPager
. También obtuve múltiples Viewpagers en la pantalla a la vez.Detener Android desde Layouting todas mis vistas
Ahora estoy experimentando el siguiente problema: Si un ViewPager se desplaza a la página siguiente/anterior, (por supuesto) tiene que volver a calcular su diseño y agregar/eliminar vistas. Me di cuenta de que el requestLayout
llama hasta la parte superior de la jerarquía de vista, por lo tanto, invalidar TODOS de mis vistas en la pantalla de la tableta (que son muchas). Esto es muy costoso.
Mi pregunta ahora es: ¿existe la posibilidad de implementar un marco alrededor del ViewPager la que hace el diseño inicial y luego no se propaga solicitudes esquemas de trazado de la vista Jerarquía que sé que después de la disposición inicial, el marco se mantiene del mismo tamaño y no cambiará.
Se me ocurrió el siguiente Marco, pero no funciona bastante bien, porque no funciona el 100% del tiempo.
public class MyFrame extends FrameLayout
{
// VARIABLE CONTROLLING THE DISPATCH OF THE LAYOUT
// REQUEST UP THE VIEW HIERARCHY
private boolean doLayout = true;
public MyFrame(Context context)
{
super(context);
doLayout = true;
}
@Override
public void requestLayout()
{
if (doLayout) // DO THE LAYOUT REQUEST UP TO THE TOP
super.requestLayout();
else
{
// JUST MEASURE MYSELF AND MY CHILDREN
measure(MeasureSpec.getMode(MeasureSpec.AT_MOST),
MeasureSpec.getMode(MeasureSpec.AT_MOST));
layout(getLeft(), getTop(), getRight(), getBottom());
}
doLayout = false;
}
}
¡Gracias por cualquier consejo!