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.

  • Viewpager no se desplaza en el diseño del coordinador
  • Android DrawerLayout no funciona con ViewPager?
  • ¿Cuál es la distancia mínima predeterminada para desplazarse correctamente en View Pager?
  • Desplazamiento de izquierda a derecha con el visor y el cajón de navegación
  • Mostrar fragmento viewpager dentro de un fragmento
  • Android ViewPager con WebView no muestra la imagen incrustada con estilo
  • Indicar después de pasar la última página en ViewPager
  • Ver ciclo de vida del paginador y del fragmento
  • ViewPager en CoordinatorLayout se contrae inesperadamente
  • Uso de onFling y ViewPager
  • Deshabilitar los gestos en PagerAdapter / ViewPager
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.