需求背景:在RecyclerView做的列表页面添加一个ViewPager效果,这种嵌套问题有很多坑,但是也得硬着头皮做下去,下面把遇到的问题慢慢抛出来。
1、RecyclerView嵌套ViewPager高度显示问题
一般情况在嵌套ViewPager的时候, 如果ViewPager的ItemView的高度确定,我们可以将ViewPager的高度设为定值,在布局文件的中写定值,或者
ViewGroup.LayoutParams layoutParams = mViewPager.getLayoutParams();
layoutParams.height = height;
mViewPager.setLayoutParams(layoutParams);
1.1、但是有时候ItemView的高度不确定,需要根据内容自适应
解决这个问题,那就只能自定义一个View继承ViewPager然后重写onMeasure方法了。在onMeasure方法中获取当前正在展示的ItemView,然后测量其高度,然后再调用ViewPager的setMeasuredDimension方法设置高度的时候先判断当前ViewPager是否是match_parent,如果是则使用ViewPager测量的高度,否则就取ItemView和ViewPager各自测量高度的最小值。
1.2、那么问题来了,在onMeasure方法怎么获取到当前正在展示的子View呢?
通过getCurrentItem()可以获取当前正在展示的子View的position,然后再调用getChildAt(int position)就可以获取到该子View了。
View currentView = mViewPager.getChildAt(mViewPager.getCurrentItem());