我有一个没有使用Fragment(只有视图)实现的ViewPager。每个页面都包含元素列表,但是这个列表并不总是具有相同的大小。
我尝试使用以下代码设置ViewPager的尺寸(扩展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);
}
问题在于它为每个页面设置了相同的高度。我需要根据列表高度为每个页面设置自定义高度。
我还尝试使用
setOnPageChangeListener
在ViewPager上调用requestLayout()
和invalidate()
,但大小仍然相同。也许我做错了...这是一些可能有用的代码:
我的PagerAdapter的一部分:
@Override
public Object instantiateItem(ViewGroup container, int position) {
// Inflate a new layout from our resources
View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_home_pager,
container, false);
mContainerView = (ViewGroup) view.findViewById(R.id.news_container);
reloadNews(position);
// Add the newly created View to the ViewPager
container.addView(view);
// Return the View
return view;
}
我的XML布局的一部分:
<ScrollView
android:id="@+id/news_scrollview"
android:layout_width="match_parent"
android:layout_height="fill_parent">
<com.ViewPagerWithHeight
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"/>
</ScrollView>
非常感谢你的帮助。