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:
- Recarga de WebView cuando Fragmento en ViewPager se retiene desde BackStack
- Mis fragmentos en la pestaña viewpager no se actualizan
- Funciones de llamada dentro de fragmentos en Android
- Cómo comprometer Fragment transacciones en FragmentPagerAdapter en onLoadFinish método de devolución de llamada?
- Cómo cambiar el color del marcador actual de la pestaña en Android ViewPager?
<?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; }
- Android ViewPager: Actualización de fragmentos fuera de la pantalla pero en caché en ViewPager
- Android: Viewpager dentro de un fragmento del cajón de navegación
- Fragmento anterior visible bajo el nuevo fragmento
- ViewPagerIndicator CirclePageIndicator no se puede instanciar
- Viewpager: Si la página se quita el contenido de las páginas siguientes obtiene el contenido de las páginas eliminadas
- Quitar la página de fragmentos de ViewPager en Android
- Cómo establecer ViewPager dentro de un fragmento
- Destruye el elemento del adaptador de ViewPager después de cambiar la orientación de la pantalla
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