Viewpager no envuelve contenido después de cargar imágenes desde Internet

Tengo un viewpager que contiene imágenes cargadas por Nostra Universal Image Loader. Este viewpager también forma parte de un listview como encabezado. Establecer la altura a wrap_content no funciona y no muestra nada, pero si lo configuro con un dip específico, funciona. Mi sospechoso es que, el viewpager consigue envolver su contenido antes de cargar las imágenes así que no demuestra nada.

Aquí está el diseño:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginRight="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="16dp"> <android.support.v4.view.ViewPager android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@id/viewpager" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <com.sblive.other.CirclePageIndicator android:id="@+id/titles" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_marginBottom="3dp" android:layout_gravity="center_horizontal|bottom" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_centerHorizontal="true"/> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/progressBar" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> </RelativeLayout> 

Parte del PagerAdapter para ViewPager:

 @Override public Object instantiateItem(ViewGroup container, int position) { inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View itemView = inflater.inflate(R.layout.header_item, container,false); ImageView img = (ImageView) itemView.findViewById(R.id.imageView); ProgressBar progressBar = (ProgressBar) itemView.findViewById(R.id.progressBar); display(img, list.get(position), progressBar); ((ViewPager) container).addView(itemView); return itemView; } 

Las vistas no "wrap_content" calcular la altura (o el ancho) cuando se utiliza "wrap_content" . Por lo tanto, no se actualizará cuando los elementos se añadan dinámicamente. Puedes llamarla limitación de Android.

Puede volver a calcular su altura y configurarla como el niño más grande si reemplaza el método onMeasure de su viewPager.

 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; for(int i = 0; i < getChildCount(); i++) { View child = getChildAt(i); child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int h = child.getMeasuredHeight(); if(h > height) height = h; } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } 

Se puede establecer igual a la altura del primer hijo del viewpager.

 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { View child = getChildAt(0); child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int height = child.getMeasuredHeight(); heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } 

Dependiendo de lo que estás tratando de lograr, puedes hacer uso de layout_weight correctamente para hacer que el viewpager ocupe el espacio restante en el padre.

  • Cómo reemplazar Fragment dentro de ViewPager, usando PagerAdapter?
  • PagerTabStrip no se muestra en ViewPager en la orientación de la aplicación Android 6.X (N)
  • Android ViewPager: descargar las imágenes de la URL
  • Recuperar un fragmento de un ViewPager
  • ¿Cómo crear ViewPager de carrusel?
  • Multi-Pane fragmentos dentro de viewpager
  • Pestañas deslizantes dentro de las pestañas de la barra de acciones
  • Viewpager no funciona correctamente en lollipop 5.0 cuando uso otros fragmentos
  • ViewPager + FragmentStatePageAdapter: ¿qué significa esta advertencia "no actualizada en línea"?
  • ViewPager page curl
  • ViewPager como una cola circular / envoltura
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.