Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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; } 

  • Deshabilitar el desplazamiento de ListView al pasar ViewPager
  • Android FragmentStatePagerAdapter devuelve pantalla en blanco al recargar fragmentos de medio
  • ViewPager en TabFragment no se carga por segunda vez
  • El fragmento secundario en el fragmento de visualizador de la vista desaparece después del intercambio
  • ¿Cómo puedo poner títulos en ViewPager usando fragmentos?
  • (ActionBar) Tabs + Pager + detail Fragmentos dentro del contenedor ViewPager
  • FragmentPagerAdapter con ViewPager y dos Fragmentos. Ir a la primera de la segunda y actualizar el primer texto
  • Código fuente para la nueva aplicación Android Lollipop Calendar
  • One Solution collect form web for “Viewpager no envuelve contenido después de cargar imágenes desde Internet”

    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.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.