Android scrollview中嵌套listview实现listview的下拉刷新上拉加载更多

【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView 一 背景概述:ScrollView里嵌套ListView,一直是Android开发者(反正至少是我们组)最讨厌的设计之一,完美打破ListView(RecyclerView)的复用机制,成功的将Native页面变成一个又臭又长的H5网页效果,但由于这种设计需求在我司项目实在太多见,无奈之下,我还是决定封装一下,毕竟,一个项目里同样的代码写第二遍的程序员都不是好的圣斗士。但是我真的是拒绝的 !拒绝的! 阅读详情

我们都知道在Android中scrollview和listview都能滑动,如果scrollview嵌套listview会出现一些问题,比如listview不能正常显示item...但是在一些项目中,一些页面内容比较多,需要在外面放一个scrollview,里面还会嵌套listview,而listview上面还有很多布局。这时候就会出现一些问题。所以遇见这种情况我们要重新listview的onMeasure方法,

设为最大模式(MeasureSpec.AT_MOST)这个也就是父组件,能够给出的最大的空间,当前组件的长或宽最大只能为这么大,当然也可以比这个小。意思是在scrollview中让listview显示所有的item。

public class MyListView extends ListView{
 public MyListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyListView(Context context) {
        super(context);
    }

    public MyListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int expandSpec = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}
如果这时候还要实现listview的的下拉刷新上拉加载更多,那就会比较麻烦了,因为listview上面还有很多布局,显然这时候用传统的listview的下拉刷新上拉加载更多是不行的。那么我们是否可以换一种思路来想,我们是否可以封装一个可以下拉刷新,上拉更多的scrollview,在scrollview的上拉刷新下拉更多的监听事件里调用listview的下拉刷新上拉加载更多的方法,然后更新一下listview的adapter。是不是这样就可以实现scrollview中嵌套listview的下拉刷新上拉加载更多了。
public class PullToRefreshLayout extends RelativeLayout {
	public static final String TAG = "PullToRefreshLayout";
	// 初始状态
	public static final int INIT = 0;
	// 释放刷新
	public static final int RELEASE_TO_REFRESH = 1;
	// 正在刷新
	public static final int REFRESHING = 2;
	// 释放加载
	public static final int RELEASE_TO_LOAD = 3;
	// 正在加载
	public static final int LOADING = 4;
	// 操作完毕
	public static final int DONE = 5;
	// 当前状态
	private int state = INIT;
	// 刷新回调接口
	private OnRefreshListener mListener;
	// 刷新成功
	public static final int SUCCEED = 0;
	// 刷新失败
	public static final int FAIL = 1;
	// 按下Y坐标,上一个事件点Y坐标
	private float downY, lastY;

	// 下拉的距离。注意:pullDownY和pullUpY不可能同时不为0
	public float pullDownY = 0;
	// 上拉的距离
	private float pullUpY = 0;

	// 释放刷新的距离
	private float refreshDist = 200;
	// 释放加载的距离
	private float loadmoreDist = 200;

	private MyTimer timer;
	// 回滚速度
	public float MOVE_SPEED = 8;
	// 第一次执行布局
	private boolean isLayout = false;
	// 在刷新过程中滑动操作
	private boolean isTouch = false;
	// 手指滑动距离与下拉头的滑动距离比,中间会随正切函数变化
	private float radio = 2;

	// 下拉箭头的转180°动画
	private RotateAnimation rotateAnimation;
	// 均匀旋转动画
	private RotateAnimation refreshingAnimation;

	// 下拉头
	private View refreshView;
	// 下拉的箭头
	private View pullView;
	// 正在刷新的图标
	private View refreshingView;
	// 刷新结果图标
	private View refreshStateImageView;
	// 刷新结果:成功或失败
	private TextView refreshStateTextView;

	// 上拉头
	private View loadmoreView;
	// 上拉的箭头
	private View pullUpView;
	// 正在加载的图标
	private View loadingView;
	// 加载结果图标
	private View loadStateImageView;
	// 加载结果:成功或失败
	private TextView loadStateTextView;

	// 实现了Pullable接口的View
	private View pullableView;
	// 过滤多点触碰
	private int mEvents;
	// 这两个变量用来控制pull的方向,如果不加控制,当情况满足可上拉又可下拉时没法下拉
	private boolean canPullDown = true;
	private boolean canPullUp = true;

	private TextVi
android自定义下拉刷新和上拉加载控件 前段时间和同事一起写了一个下拉刷新和上拉加载的控件。该控件实现的功能的功能还是挺多的。支持自定义头部和底布局,同时还处理了NestScrolling机制的嵌套滑动的一些东西。我们先来看下效果图吧。 1.主页面布局展示 2.支持RecycleView的刷新和加载效果。 3.支持listView的刷新和加载效果。 4.支持ScrollView的刷新和加载效果 5.支持NestScrollin 阅读详情

相关推荐

Android ScrollView、ListView与GridView下拉刷新上拉加载实战详解

GridView的问题比ListView更严重,因为它还要考虑列数适配。我们可以通过重写来强制它展开:@Override这里的关键是用了模式,并赋予一个极大值(约50万像素),相当于说:“你想多高就多高,但别超过这个上限。虽然听着有点野蛮,但在某些固定内容的页面(如标签墙、功能入口网格)中还挺实用的。但说实话,这些“打补丁”的方式就像是给漏水的船贴创可贴。真正靠谱的解决方案,还得靠现代化的嵌套滚动架构。默认的刷新样式太普通?想要更有个性的动画?完全可以!

weixin_29025501的博客 941

Android开发中的ScrollView嵌套ListView实战指南

在Android开发中,ScrollView和ListView是两种常用的视图组件,分别用于处理滚动内容和列表数据。ScrollView为单一滚动视图提供了支持,能够展示超出屏幕范围的视图内容,而ListView则针对列表形式的数据展示优化,允许用户上下滚动浏览多项数据。尽管两者各有所长,但在实际开发中,开发者常常会遇到需要将ListView嵌入ScrollView中的场景,希望能够在单个屏幕内展现更多的列表项。

weixin_28931507的博客 898

移动端UI自动化测试新框架Maestro:声明式语法与实战指南

UI自动化测试是保障移动应用质量的关键环节,其核心原理是通过脚本模拟用户操作,对应用界面进行自动验证。传统命令式框架(如基于Selenium WebDriver的Appium)虽然控制粒度细,但脚本编写和维护成本较高。声明式测试框架则通过描述“做什么”而非“怎么做”,显著降低了技术门槛和维护复杂度,其技术价值在于提升测试脚本的可读性、编写效率与跨团队协作能力。在移动端测试领域,这尤其适用于需要快速验证核心业务流程、进行冒烟测试和回归测试的场景。本文聚焦的**Maestro框架**,正是这一理念的杰出实践。它

weixin_32921023的博客 713

DSP 6678处理器Cache配置实战:从基础设置到多核一致性优化

本文深入探讨了TI TMS320C6678多核DSP处理器的Cache配置与优化实战。文章从基础概念入手,详细解析了L1、L2 Cache的模式选择与内存属性配置,并重点剖析了多核环境下缺乏硬件一致性支持带来的挑战。核心部分提供了基于Writeback和Invalidate操作的手动一致性维护策略,以及针对数据流处理、频繁访问共享数据等不同场景的性能调优与避坑指南,帮助开发者构建高效稳定的多核DSP系统。

o5p6q的博客 183

从零到一:如何用YOLOv8和PyQt5打造一个高效的路面坑洞检测系统

本文详细介绍了如何利用YOLOv8和PyQt5开发一个高效的路面坑洞检测系统。从环境配置、数据采集标注到模型训练优化,再到PyQt5界面开发与系统集成,提供了完整的实战指南。该系统结合深度学习技术,显著提升了道路检测的准确性和效率,适用于各类道路维护场景。

weixin_29047919的博客 308

ESP32-S3射频测试与全球认证全栈实践指南

功率谱密度(PSD)和发射功率等级是无线通信设备射频合规的核心基础概念,其物理层原理直接决定自适应测试、阻塞容限及多国认证的通过路径。PSD ≥10 dBm/MHz触发强制性自适应测试,需验证LBT机制与跳频鲁棒性;而16级可编程发射功率等级(-24 dBm至+20 dBm)则为功耗、覆盖与法规平衡提供工程调控维度。该能力广泛应用于低功耗蓝牙IoT终端、智能家居网关及工业无线传感器等场景,尤其在ESP32-S3平台中,需结合eFuse校准、Sigma工具链与QuickTrack认证策略实现从实验室调试到量产

weixin_34945060的博客 288

实验5 振幅调制(集成乘法器幅度调制电路)

目录5-1 振荡调制的基本工作原理一.振幅调制和调幅波1.普通调幅波(AM)(1)调幅波的表达式、波形(2)调幅波的频谱2.抑制载波双边带调幅(DSB)3.抑制载波单边带调幅(SSB)二.普通调幅波的产生电路三.抑制载波调幅的产生电路5-2 振幅调制实验电路 5-1 振荡调制的基本工作原理 根据电磁波理论知道,只有频率较高的振荡才能被天线有效地辐射。但是人的讲话声音变换为相应电信号的频率较低,不适于直接从天线上辐射。因此,为了传递信息,就必须将要传递的信息“记载”到高频振荡上去。这一“记载”过程称为调

胡毛毛的博客 3万+

Android功耗系列专题分析之四:待机概率性功耗高的失效分析

本文分析了Android设备待机功耗异常高的问题。通过日志发现系统休眠失败,原因是PowerManagerService.Display唤醒锁未被释放。进一步排查发现,指纹解锁功能在灭屏时未正确释放屏幕锁定,导致DisplayReady状态异常。解决方案是将指纹功能的背光控制与DisplayReady状态控制分离,使用两个变量独立管理。经验表明,快速定位问题比解决问题更重要,修改原生流程时需谨慎评估风险。

451

硬核干货|C#+EtherCAT协议:高精度多轴伺服运动控制通信实战

本文摘要: 文章聚焦工业自动化领域多轴伺服运动控制的高精度与实时性需求,基于C#与EtherCAT协议实现完整解决方案。EtherCAT凭借微秒级同步、分布式架构等优势成为首选,而C#通过优化GC策略和实时线程可满足工业控制要求。文章从工程落地角度,详细拆解EtherCAT的PDO/SDO通信机制与多轴同步控制逻辑,提供完整的C#代码实现(主站初始化、伺服配置、运动控制等),所有代码均通过汇川/松下伺服实测验证。核心亮点包括:纯C#原生开发、工业现场高频问题解决方案、硬件适配指南,帮助开发者快速掌握高精度多

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 582

YOLOv8融合HAttention:激活更多像素的注意力机制科研实践指南

HAttention通过层级化像素激活与融合的设计,为YOLOv8的像素级特征利用能力带来了质的飞跃。从原理理解到代码实现,再到集成调优,每一步都是科研中“解决像素信息遗漏难题”的具体实践。如果你在实验中发现某类细节或大尺度目标的检测仍有不足,可以尝试结合数据增强(如随机裁剪、多尺度训练)来强化模型对像素特征的学习能力。科研的价值在于不断挖掘技术的潜力,希望这份指南能真正帮你在目标检测的像素级特征利用领域找到新的突破点,祝你在科研探索中持续收获创新与成长。

FJN110的博客 106

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

下一篇: json格式正确却无法转换成 JSONObject
Shawn7788
博客等级 码龄12年 10粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值