由ViewPager动态适配Item的高度引发的“血案”

本文探讨了在RecyclerView中嵌套ViewPager时遇到的高度显示问题和PagerAdapter中notifyDataSetChanged失效的难题。通过自定义ViewPager,重写onMeasure方法,并监听滑动事件以手动刷新布局。同时,解决Adapter中notifyDataSetChanged无效的问题,需要在自定义PagerAdapter中重写getItemPosition方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求背景:在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());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值