Viewpager не обертывает содержимое после загрузки изображений из Интернета

У меня есть viewpager, который содержит изображения, загруженные Универсальным загрузчиком изображений Nostra. Этот viewpager также является частью списка в виде заголовка. Установка высоты на wrap_content не работает, и она ничего не показывает, но если я настрою ее на определенный провал, она работает. Мой подозреваемый в том, что 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> 

Часть PagerAdapter для 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; } 

Solutions Collecting From Web of "Viewpager не обертывает содержимое после загрузки изображений из Интернета"

Представления не пересчитывают высоту (или ширину), когда используется "wrap_content" . Поэтому он не обновляется, когда элементы добавляются динамически. Вы можете назвать это ограничением Android.

Вы можете пересчитать его высоту и установить его на самый большой ребенок, переопределив метод onMeasure вашего 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); } 

Вы можете установить его равным высоте первого ребенка 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 занимать оставшееся место в родительском.