Aktualnie pracuję nad aplikacją na tablety, która intensywnie korzysta z widgetu ViewPager
. Otrzymałem jednocześnie wiele Viewpagers na ekranie.Zatrzymaj Androida przed układaniem wszystkich widoków
Teraz mam następujący problem: Jeśli jeden ViewPager przewija do następnej/poprzedniej strony, musi (oczywiście) ponownie przeliczyć swój układ i dodać/usunąć widoki. Zauważyłem, że requestLayout
dzwoni aż na samą górę hierarchii widoków, przez co unieważnia moje Widoki na ekranie tabletu (które są dużo!). Jest to bardzo kosztowne.
Moje pytanie brzmi: czy istnieje możliwość wdrożenia ramka wokół ViewPager który dokłada początkowy układ i wtedy nie propagować layout- wnioski z Up The View Hierarchy jak wiem, że po początkowym układzie, ramka pozostaje ten sam rozmiar i nie ulegnie zmianie.
Wpadłem na następującą ramkę, ale nie działa ona całkiem dobrze, ponieważ nie działa w 100% przypadków.
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;
}
}
Dzięki za porady!