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:
- Pestañas deslizantes dentro de las pestañas de la barra de acciones
- Android cuando ViewPager inserta como Child get error android.view.ViewGroup.jumpDrawablesToCurrentState (ViewGroup.java:5035)
- Enviar valores de la actividad ViewPager a un fragmento por paquete
- Dynamic Center Aligned ViewPager
- Sincronizar dos ViewPagers con OnPageChangeListener
<?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; }
- Desaparición de los botones de la barra de acción al pasar entre fragmentos
- Fragmentos anidados - comunicación entre fragmentos secundarios en un fragmento padre en un viewpager
- ¿Cómo probar si una vista fragmentada es visible para el usuario?
- Guardar el estado de WebView y restaurar en ANDROID
- No se puede actualizar / actualizar listview en un fragmento de otro fragmento en ViewPager
- Android ViewPager: descargar las imágenes de la URL
- ¿Hay una manera de desactivar el desvanecimiento que un viewPager tiene desplazamiento a los bordes?
- Visualización de varias páginas en ViewPager, posición incorrecta
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.
- Reconocimiento de la actividad no funciona después de "wifi y ubicación de la red móvil" se apaga y enciende
- Error al usar Robolectric para probar un ActionBarActivity