我正在做的是一個ListView。該ListView使用適配器來擴充僅包含一個ViewPager的RelativeLayout。ListView中的ViewPager - 動態測量高度(適配器中的WRAP_CONTENT充氣)
在適配器的getView中,自定義的PagerAdapter被實例化爲ViewPager,並且爲ViewPager調用.setAdapter。 setAdapter被調用後,我做了一個返回行或返回視圖;這會在ListView中結束該適配器的getView方法。
在PagerAdapter我已經實現
public Object instantiateItem(View collection, int position) {}
這基本上就是建立尋呼機適配器子視圖(頁)。它進行膨脹並設置所有子視圖,然後將視圖添加到集合中。
我認爲問題在於,在返回完成行後,PagerAdapter尚未完成設置子項,因此ListView認爲ViewPager爲空,並以此方式將其繪製到屏幕上。我所做的是我認爲基本上是黑客。
我嘗試使用這樣的測量instantiateItem第一個孩子的看法:
view.measure(MeasureSpec.makeMeasureSpec(widthMeasureSpecSize, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(heightMeasureSpecSize, MeasureSpec.UNSPECIFIED));
((Pager) collection).requestedHeight = view.getMeasuredHeight();
值heightMeasureSpecSize實際上是由.setAdapter前的ListView適配器設置的公共財產被稱爲 的(( Pager)集合).requestedHeight是我在擴展ViewPager時所做的另一個屬性。在設置值之前它默認爲100。然後我overrided像onMeasure方法,以便:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
super.onMeasure(widthMeasureSpec, View.MeasureSpec.makeMeasureSpec(requestedHeight, View.MeasureSpec.AT_MOST));
}
這一切的代碼,當我運行的應用程序,每當onMeasure被調用的ViewPager,ListView控件似乎在ViewPager 100,然後重新添加到列表使用onMeasure進行計算並使用視圖尋呼機的第一個孩子的measuredHeight重新繪製該項目....
所有這些都是因爲wrap_content在ViewPager中被破壞。有沒有比這樣做更好的方法?這似乎非常低效。
我解決了我自己的問題。幾天後,遠離這個問題,並在回家的路上想到了解決方案。所有的觀點都需要同時被誇大。 ViewPager及其所有子項。在第一個孩子膨脹後,測量它,然後將ViewPager的佈局參數設置爲相同。它會工作。 –