【Android】 banner+tab吸顶+viewpager切换+刷新加载之实现

本文记录了在Android项目中实现Banner、Tab吸顶、ViewPager切换以及下拉刷新和上拉加载的过程。使用了SmartRefreshLayout、TabLayout+ViewPager,解决RecyclerView嵌套滑动冲突,采用vLayout实现吸顶效果。遇到的挑战包括ViewPager高度计算、事件冲突等问题,最终通过自定义组件和调整布局解决。
摘要由CSDN通过智能技术生成

功能简图

如图,顶部有轮播图,tab需要吸顶,不同tab对应的条目不同,各tab下的条目存在不同类型,需要支持下拉刷新与上拉加载。天资愚笨,花了一周时间终于实现,特此记录。

项目中刷新加载控件采用SmartRefreshLayout,这次仍然打算采用它,不知道是否冲突。

【tab切换】毫无疑问采用TabLayout+ViewPager实现,难点是【吸顶】,因为自己没有实现过。

google关键词:【android 吸顶+切换】,淘到了这篇简文,算是有一点眉目,感激作者的分享。

run了Demo并整合了SmartRefreshLayout,谢天谢地,没有冲突。

Demo中的一个干货是OuterRecyclerViewInnerRecyclerView两个类。主要解决了RecyclerView嵌套后,纵向滑动的冲突。前者负责是否进行事件拦截,后者负责是否消费事件及将结果通知给前者。这两个类的部分命名表意性不强,注释不足,且引入tab后点击事件不灵敏了,我进行了改进,代码见文末。

Demo中的另一个干货是让我知道了阿里vLayout的存在,承认平时太懒了,作为程序员不关注技术时事及大厂动态的我有点失败。还好,【吸顶】采用vLayout实现了。但也走了一些弯路,参见了示例的我最后发现要在实例化StickyLayoutHelper之后为其设置颜色helper.setBgColor(0xffffffff)才符合产品效果图。
右看
ViewPager的每一个Item都是一个Fragment(with InnerRecyclerView),发现InnerRecyclerView无法滑动导致列表只能展示一部分。以为是SmartRefreshLayout的干扰,以为是OuterRecyclerView和InnerRecyclerView的实现有问题,但最终发现是ViewPager的高度出现了问题。

于是就根据不同的数据源(由于Tab不同)中item的数量及Item的布局高度计算出ViewPager的高度,并在合适的时候(ViewPager的pageChange监听中)改变ViewPager的Height,这需要维护的东西太多了,太low了,而且ViewPager的高度最终是计算出来的最大值。

百度关键字:【ViewPager Fragment 高度】会发现,各种让自定义ViewPager并重写onMeasure方法。有遍历child找到其中最大高度的、有使用getChildView(0)使用其高度的、有使用getCurrentItem()高度的,看的眼花缭乱。

OuterRecyclerView的Item中layout_height="wrap_content"的ViewPager显示根本不出来(空白),layout_height="match_parent"的ViewPager也只是显示一部分(即InnerRecyclerView的列表无法滑动)

但最终找到了老外

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值