Viewpager mit dynamischer Höhe funktioniert nicht (immer die Höhe des ersten Fragments verwenden)Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Viewpager mit dynamischer Höhe funktioniert nicht (immer die Höhe des ersten Fragments verwenden)

Post by Anonymous »

Ich habe diese und jene Antworten verfolgt und auch diesen Link gefunden.

Ich nutze diese Ressourcen, um Versuche und Irrtümer durchzuführen. Jetzt hat mein benutzerdefinierter ViewPager seinen Inhalt erfolgreich gemessen, aber nur der erste wurde angezeigt. Zu Ihrer Information, mein ViewPager enthält einige komplexe Ansichten, wie ExpendableListView – deshalb funktioniert keiner der Codes in diesen Ressourcen perfekt, ich muss den Code selbst ändern.
Ich habe 4 Fragmente (Inhalt), also verwende ich pager.setOffscreenPageLimit(3);

Dies ist mein benutzerdefinierter ViewPager :

Code: Select all

public class CustomViewPager extends ViewPager{

public CustomViewPager (Context context) {
super(context);
}

public CustomViewPager (Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);

boolean wrapHeight = MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST;

final View tab = getChildAt(0);
int width = getMeasuredWidth();
int tabHeight = tab.getMeasuredHeight();

if (wrapHeight) {
// Keep the current measured width.
widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
}

int fragmentHeight = measureFragment(((Fragment) getAdapter().instantiateItem(this, getCurrentItem())).getView());
heightMeasureSpec = MeasureSpec.makeMeasureSpec(tabHeight + fragmentHeight + (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics()), MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

public int measureFragment(View view) {
if (view == null)
return 0;

view.measure(0, 0);
return view.getMeasuredHeight();
}
}
Das ist mein CustomPagerTabStrip :

Code: Select all

int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
android.view.ViewGroup.LayoutParams params =  getLayoutParams();
params.height = getMeasuredHeight();
Und das ist mein XML :

Code: Select all

        







Der Beispielfall:

Wenn die Höhe des ersten Fragments 100 Pixel beträgt, dann Alle anderen Fragmente bleiben bei 100 Pixel.
Wenn also die Höhe des zweiten Fragments 130 Pixel beträgt, wird es auf 100 Pixel gekürzt.

Als ich es versucht habe zum Debuggen, das onMeasure wird auf meinem CustomViewPager immer viermal aufgerufen, wenn die Aktivität erstellt wird, aber alle lesen nur das erste Fragment. Das onMeasure wird danach nie wieder aufgerufen, selbst wenn ich von einem Fragment zum anderen wechsle (nach links/rechts schiebe).

Bitte helfen Sie mir, ich habe viele Stunden damit verbracht, dieses Ding zum Laufen zu bringen.
Fragen Sie mich einfach, wenn Sie weitere Informationen benötigen. Vielen Dank für Ihre Zeit.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post