Viewpager在从互联网加载图像后不包装内容

我有一个viewpager存放由Nostra的通用图像加载器加载的图像。 这个viewpager也是列表视图的一部分。 将高度设置为wrap_content不起作用,它不显示任何内容,但是如果将其设置为特定的倾angular,则它将起作用。 我怀疑的是,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> 

ViewPager的PagerAdapter的一部分:

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

Solutions Collecting From Web of "Viewpager在从互联网加载图像后不包装内容"

当使用"wrap_content"时,视图不重新计算高度(或宽度)。 所以当dynamic添加项目时它不会自动刷新。 你可以称之为Android的限制。

您可以重新计算它的高度,并通过覆盖viewPager的onMeasure方法将其设置为最大的孩子。

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

您可以将其设置为等于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); } 

根据你想要达到的目标,你可以正确使用layout_weight,以使viewpager占据父级的剩余空间。