Android-PullToRefresh 使用心得

Android-PullToRefresh库使用指南与实践案例 本文还有配套的精品资源,点击获取 简介:Android-PullToRefresh开源项目简化了在Android应用中实现下拉刷新和上拉加载更多功能的流程,支持ListView和GridView等视图。本文介绍了如何将库集成到项目中,包括添加依赖、配置布局文件、设置监听器处理刷新事件,并进行自定义适配器更新。同时,探讨了如何利用库提供的自定义选项优化用户界面。 1... 阅读详情

http://blog.youkuaiyun.com/lmj623565791/article/details/38238749 鸿洋的比较详细

http://www.cnblogs.com/zhujiabin/p/5541570.html

http://www.cnblogs.com/RabbitLx/p/5894291.html

http://www.cnblogs.com/jshen/p/4097445.html


目前下拉刷新已经满大街都是,在自己的应用如果不使用这个模式的话,出门都不好意思和人家打招呼,该文章就是简单探讨下针对于 github 上的这个开源项目的使用心得。

为什么是它?因为在 stackoverflow 上大家都说它不错,所以就试试看吧!该项目的位置 Android-PullToRefresh 遗憾的是目前已经停止维护,但是已经足够强大所以不维护就不维护吧!

注意:对应的还有一个项目,也是这个作者刚刚开的 ActionBar-PullToRefresh 这个是在 actionbar 上增加下拉的效果,Android-PullToRefresh 这个工程在我们下拉的时候会有一个 view 显示出来,而这个工程直接就是利用 actionbar 来显示,注意这两者的区别

首先,看看目前几个主流 app 的下拉刷新的效果。

sina 微博

 


网易新闻

 

腾讯微博

 

接下来,是我们自己实现后的效果

 

 

从图片来看非常的相似,所以接下来我们就看看这个开源的 lib 如何使用。

源码下载下来之后将 library 这个目录中的代码放到一个位置,然后在主工程中去引用它,通常都是在主工程的 project.properties 中去指定引用的位置

android.library.reference.4=library/Android-PullToRefresh  

因为这个是我工程中加入的第四个引用的库,所以是 reference.4,如果这是你的第一个的话,那么应该是 reference.1,这个关于库的引用在 android sdk 的 samples 目录下可以找到了两个工程 "TicTacToeLib" 和 "TicTacToeMain" 来自己参考下。

好了,先 build 下Android-PullToRefresh 生成 jar 包,然后在 build 主工程,应该没什么问题,继续。

接下来就关于这个部分的使用,使用主要考虑两个方法:1. 这个 lib 的基本功能的使用,2. 这个 lib 的自定义扩展

基本功能的使用

1. 在 layout 文件中对应的 listview 不能使用 android 原生的 listview,而是要使用 PullToRefreshListView 代码如下

复制代码
<?xml version="1.0" encoding="utf-8"?>  
  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical">  
  
    <com.handmark.pulltorefresh.library.PullToRefreshListView  
        xmlns:ptr="http://schemas.android.com/apk/res-auto"  
        android:id="@+id/my_list"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:cacheColorHint="#00000000"  
        android:fadingEdge="none"  
        android:fastScrollEnabled="false"  
        android:footerDividersEnabled="false"  
        android:headerDividersEnabled="false"  
        android:smoothScrollbar="true"  
        ptr:ptrAnimationStyle="flip"  
        ptr:ptrHeaderTextAppearance="@android:attr/textAppearanceMedium"/>  
  
    <!-- Here is the view to show if the list is emtpy -->  
    <ScrollView android:id="@+id/empty"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:fillViewport="true">  
  
        <LinearLayout  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
            android:orientation="vertical">  
  
            <TextView  
                android:id="@+id/emptyText"  
                android:layout_width="fill_parent"  
                android:layout_height="fill_parent"  
                android:text="@string/noText"  
                android:textSize="20sp"  
                android:textColor="?android:attr/textColorSecondary"  
                android:paddingLeft="10dip"  
                android:paddingRight="10dip"  
                android:paddingTop="10dip"  
                android:lineSpacingMultiplier="0.92"  
                android:gravity="center" />  
        </LinearLayout>  
    </ScrollView>  
</LinearLayout>  
复制代码

在这个 layout 中分为上下两个部分,上面是一个 listview, 下面是一个 empty view,用来在没有内容的时候显示,通过 listview 的 setEmptyView()就可以达到这个效果,千万不要自己费事去写两个 view 的逻辑控制代码。

关于 ptr:XXX 属性的使用,会在自定义扩展的那个部分解释下,这里暂时跳过。

2. 在代码中使用这个 listview,代码如下

复制代码
private PullToRefreshListView mList;  
  
@Override  
protected void onCreate(Bundle savedInstanceState) {  
    // ...  
  
    mList = (PullToRefreshListView)findViewById(R.id.my_list);  
    mList.setEmptyView(findViewById(R.id.empty));  
    mList.setOnItemClickListener(new OnItemClickListener() {  
  
        @Override  
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
            if (DEBUG) Log.d(TAG, "onItemClick() : pos=" + position + ", id=" + id);  
            parent.getAdapter().getItem(position);  // @warning: Should not use mAdapter  
              
            // do something  
        }  
  
    });  
  
    mList.setOnPullEventListener(new OnPullEventListener<ListView>() {  
  
        @Override  
        public void onPullEvent(PullToRefreshBase<ListView> refreshView, State state,  
                Mode direction) {  
            if (DEBUG) Log.d(TAG, "onPullEvent() : " + state.name());  
  
            if (state.equals(State.PULL_TO_REFRESH)) {  
                refreshView.getLoadingLayoutProxy().setPullLabel(getString(R.string.pull_to_refresh));  
                refreshView.getLoadingLayoutProxy().setReleaseLabel(getString(R.string.release_to_refresh));  
                refreshView.getLoadingLayoutProxy().setRefreshingLabel(getString(R.string.loading));  
  
                String label = DateUtils.formatDateTime(getApplicationContext(),  
                        System.currentTimeMillis(),  
                        DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);  
                // Update the LastUpdatedLabel  
                refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(  
                        getString(R.string.updated) + " : " + label);  
            }  
        }  
    });  
  
    mList.setOnRefreshListener(new OnRefreshListener<ListView>() {  
        @Override  
        public void onRefresh(PullToRefreshBase<ListView> refreshView) {  
            if (DEBUG) Log.d(TAG, "onRefresh()");  
  
            // Do work to refresh the list here.  
            refresh();  
        }  
    });  
  
    // ...  
}  
复制代码

此处有几个地方要注意:
1. 如果想对 list item 点击之后做一些事情,此处有个问题要注意下,那就是我们的下来显示的 view 是 header view,所以此处在 onItemClick() 函数中传入的 position 不是从 0 开始而是从 1 开始,如果我们使用通常情况下的 mAdapter 去 getItem() 则实际中始终获取的都是我们点击 item 的下一个 item 的位置,所以此处我们要通过传进来的 parent 的 adapter 来获取 item,详细可以参考当ListView有Header时,onItemClick里的position不正确

 

2. 因为下拉的时候显示的文字,每个人有每个的需求,所以会不一样,所以就需要使用 setOnPullEventListener() 来更新文字,这个开源库自己提供的 sample 中更新文字是放到 setOnRefreshListener() 中,但是那个只是在刷新的时候才更新问题,通过对比那些常用 app 的下拉效果你会发现那个时候在更新已经慢了,所以要放到这里

3. 此处代码没有列出来,就是 refresh 完了之后要把 pull view hide 起来,调用 onRefreshComplete() 即可,详情可以参考它自己提供的 sample。

4. 还要注意的是,还有很大的需求是点击刷新,那么点击之后这个 pull view 也要 show 出来,但是不应该 show "下拉可以刷新" 和 "松开可以刷新" 这两个画面,而是直接显示正在刷新的那个画面,这要怎么做到的呢?通过setRefreshing()这个函数即可做到,对应有另外一个函数叫做demo() 它包括了 “下拉->松开->刷新” 的整个过程,这是我们在这种条件下不需要的。

5. 在它自己的 sample 中还可以增加声音的效果,这个比较简单,自己看下即可。

Android-PullToRefresh 自定义扩展

此处的扩展指的是不修改这个开源库任何一行本身的代码来实现自定义一些属性,那些属性可以自定义这个可以在这个库的 values/attrs.xml 中看到,我们使用的时候就像上面 layout 中的写法一样,首先包含下命名空间,然后就可以指定对应的属性

复制代码
<com.handmark.pulltorefresh.library.PullToRefreshListView  
        xmlns:ptr="http://schemas.android.com/apk/res-auto"  
        android:id="@+id/my_list"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:cacheColorHint="#00000000"  
        android:fadingEdge="none"  
        android:fastScrollEnabled="false"  
        android:footerDividersEnabled="false"  
        android:headerDividersEnabled="false"  
        android:smoothScrollbar="true"  
        ptr:ptrAnimationStyle="flip"  
        ptr:ptrHeaderTextAppearance="@android:attr/textAppearanceMedium"/>  
复制代码

"xmlns:ptr="http://schemas.android.com/apk/res-auto" 声明下,然后可以使用 ptr:XXX 的属性了。

一些属性的简单说明

ptrAnimationStyle :  flip 这个效果是有向下和向上的两个箭头的,rotate 没有箭头不管怎么拉都是一个 progress bar

ptrMode :both 指的是 listview 的上面和下面都有这种拉动刷新的效果,下面的刷新通常我们在滑到最下面然后 loading 数据的时候可以看到

其他的属性可以在 attrs.xml 中看它的注释来理解,总之一句话,尽量少自己造轮子先看看作者有没有提供接口。

【Android应用源码】-PullToRefresh-master.zip 资源说明: 1:本资料仅用作交流学习参考,请切勿用于商业用途。 2:一套精品实用安卓应用APP源码资源,无论是入门练手还是项目复用都超实用,省去重复开发时间,让开发少走弯路! 立即下载

相关推荐

基于Unidbg的小红书加密协议动态分析与算法还原实战

在移动应用安全领域,加密协议与签名机制是保障数据传输安全、实现客户端身份验证的核心技术。其原理通常涉及哈希算法、对称/非对称加密以及自定义的混淆逻辑,旨在防止请求被篡改或重放。理解这些协议对于安全研究、风控策略制定及合规的数据交互分析具有重要价值。在实际的工程实践中,面对高度混淆和加固的Native代码(SO库),传统的静态分析往往难以深入。此时,沙盒模拟执行技术提供了一种动态、可控的分析方案。通过搭建一个虚拟的移动应用运行环境,研究人员可以在无需真机、规避反调试机制的情况下,完整地追踪和观察加密算法的执行

weixin_29315091的博客 325

Android PullToRefresh (ListView GridView 下拉刷新) 使用详解

可以在初始化完成mPullRefreshListView后,通过mPullRefreshListView.getLoadingLayoutProxy()可以得到一个ILoadingLayout对象,这个对象可以设置各种指示器中的样式、文本等。startLabels.setPullLabel(“你可劲拉,拉…”);// 刚下拉时,显示的提示startLabels.setRefreshingLabel(“好嘞,正在刷新…”);// 刷新时。

2401_84149896的博客 991

机械臂标准DH建模及正运动学分析(以IRB4600型工业机械臂为例)

对于工业机械臂而言,运动学是不考虑力学特性的情况下对机械臂的几何参数与其位置、速度、加速度等运动特性的关系研究。DH建模是运动学的基础,全称为Denavit-Hartenberg建模方法,是一种广泛应用于机器人运动学中的建模技术。该方法通过在每个连杆上建立坐标系,并利用齐次坐标变换来实现连杆之间的坐标转换。通过依次变换,可以推导出末端执行器相对于基坐标系的位姿,从而建立机器人的运动学方程。以IRB4600型六自由度工业机械臂为例,选择标准DH建模方法,建立其正运动学模型。

chen_mp的博客 1万+

Android开发---Android-PullToRefresh使用

android小白入门课

u012967763的专栏 615

STM32H743 LAN8720网口配置避坑指南:用CubeMX v6.5.0快速搞定LWIP+FreeRTOS

本文详细介绍了使用CubeMX v6.5.0配置STM32H743与LAN8720网口的LWIP+FreeRTOS方案,涵盖硬件连接、时钟配置、ETH外设初始化及LWIP协议栈调优等关键步骤。特别针对常见陷阱提供解决方案,帮助开发者快速实现稳定网络通信,适用于嵌入式网络开发场景。

weixin_33739523的博客 357

深入解析Panfrost驱动:Mali-GPU开源驱动的架构与实现

本文深入解析了Panfrost驱动作为Mali-GPU开源驱动的架构与实现。从诞生背景到硬件架构演进,详细介绍了Panfrost如何突破ARM闭源策略,实现全栈支持。文章还探讨了驱动设计中的关键技术挑战与性能优化策略,为开发者提供了实用的编译部署指南和性能调优方法。

weixin_30790841的博客 552

Android下拉刷新组件—PullToRefresh

介绍 下拉刷新,几乎是每个 Android 应用都会需要的功能。 android-Ultra-Pull-To-Refresh (以下简称 UltraPTR )便是一个强大的 Andriod 下拉刷新框架。 主要特点: (1).继承于 ViewGroup , Content 可以包含任何 View 。 (2).简洁完善的 Header 抽象,方便进行拓展,构建符合需求的头部。 PullToR

程序病毒小队的博客 746

手把手教你用8位单片机IO口直接驱动WS2812灯带(附完整代码和避坑指南)

本文详细介绍了如何使用8位单片机IO口直接驱动WS2812灯带,包括硬件准备、时序生成、色彩引擎与特效算法的实现,以及调试技巧与性能优化。通过汇编语言优化和精确时序控制,实现高效的LED驱动和炫酷的彩虹灯效,适合嵌入式开发者和硬件爱好者参考。

weixin_42696271的博客 304

android-PullToRefresh集成使用心得

下拉刷新集成步骤: 1. 在XML中添加com.handmark.pulltorefresh.library.PullToRefreshListView 2. 若有特殊需求: (1)想更改刷新提示文字,可参考initPullRefreshview() (2) 如需更改特定的刷新布局: a 可修改或继承 LoadingLayout(具体参见源码FlipLoadingLayout)

nothingl3的专栏 1083

手把手教你学Simulink——机器人力控场景实例:基于Simulink的永磁同步电机重力补偿力矩控制仿真

本文介绍了基于Simulink的机器人重力补偿力矩控制仿真方法。针对机器人悬停时电机发热、抖动等问题,提出通过前馈补偿重力转矩的解决方案。文章详细阐述了从机器人动力学建模、重力补偿计算、PMSM转矩控制到系统集成的完整实现流程,并以2-DOF机械臂为例验证了补偿效果。结果表明,重力补偿能显著降低电机电流和拖拽力,提高系统柔顺性。文中还提供了高级功能扩展方向,如参数辨识、摩擦补偿等,为实际工程应用提供了参考框架。

MHD0815的博客 154

Windows密码忘了怎么办?一分钟看懂Windows密码底层机制:无需重装系统也能无痕找回登录密码

忘记Windows开机密码,不一定非得重装系统!本文手把手教你通过提取NTLM Hash值实现“无痕找回密码”,无需PE、无需清除密码,对系统零修改 🛡️ 搭配mimikatz与在线解密平台,小白也能快速上手,了解Windows密码底层机制 🔐

XiaoqiangClub的博客 123

Android-PullToRefresh-master使用心得

关于上拉下拉加载,网络上使用很多的是国外大神发布的Android-PullToRefresh,确实方便很多,现在来谈谈使用心得: 1:源码下载:https://github.com/chrisbanes/Android-PullToRefresh 2:环境配置: 将压缩文件解压后, 把\Android-PullToRefresh-master 下的library拷贝到和主工程

zengchao2013的专栏 1771

RT-DETR改进策略【卷积层】| CVPR-2020 Strip Pooling 空间池化模块 处理不规则形状的对象 含二次创新

一、本文介绍 本文记录的是利用Strip Pooling模块优化RT-DETR的目标检测网络模型。Strip Pooling结合了长而窄的卷积核形状在一个空间维度上的长程关系捕捉能力和在另一个空间维度上的局部细节捕捉能力,有效地处理复杂的场景信息。这一机制通过采用1×N1×N1×N或N×1N×1N×1的池化核形状来适应不同的图像特征,提高模型对目标形状和分布的适应性。在场景解析网络中,Strip Pooling可以被用于提升对具有长程带状结构或离散分布目标的解析能力,特别是在复杂场景或不同对象布局条件下效果

Limiiiing的博客 580

android 下拉刷新

PullToRefreshAndLoad Android几种强大的下拉刷新库good Android下拉刷新上拉加载控件(适用于所有View)good pullToRefresh Android-PullToRefresh下拉刷新库基本用法 Android PullToRefresh (ListView GridView 下拉刷新) 使用详解 Android-PullToRefre...

weixin_30360497的博客 80

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

下拉刷新Listview(8.30)

Android-PullToRefresh 1项目托管地址: https://github.com/bavariama1/Android-PullToRefresh 2 快速开始教程:https://github.com/chrisbanes/Android-PullToRefresh/wiki/Quick-Start-Guide 3 定义刷新图标:https://github.com/ch...

weixin_34023982的博客 78

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android Studio—PullToRefresh 框架

下拉刷新这个功能我们都比较常见了,今天介绍的就是这个功能的实现。2.使用OnRefreshListener回调在 onRefresh方法中触发加载数据操作.实现下拉监听.设置下拉刷新的模式,有多重方式可选。无刷新功能,从顶部刷新,从底部刷新,二者都有,只允许手动刷新。顶部指示箭头的图片,设置后会覆盖ptrDrawable中顶部的设置。当设置rotate时,可以用这个来设置刷新时旋转的图片。设置下拉时标识图的动画,默认为rotate。插入PullToRefreshListView。设置刷新view的背景。

2401_89760349的博客 1026

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android PullToRefresh——ListView使用详解

前段时间,在使用ListView的过程中突然发现PullToRefresh的使用方法,用于上拉下拉刷新使用,觉得该方法很好使用,特此分享,供大家参考。     由于PullToRefresh方法是开源的第三方插件使用,所以使用步骤如下: 1、在GitHub上面下载源码以及需使用的包,地址为https://github.com/chrisbanes/Android-PullToRefre

夏天的夏,夏天的天。 3486

如何在Android项目中集成PullToRefresh?3分钟快速上手指南

PullToRefresh是一个基于Maxwin的XListView改造的Android下拉刷新库,它完善了下拉刷新和上拉加载更多功能,还支持自动刷新、自动加载以及ScrollView组件。本文将带你快速掌握这个强大的Android刷新组件的集成方法。 ## 📌 准备工作:获取项目源码 首先需要将PullToRefresh项目克隆到本地: ```bash git clone https:/

gitblog_00982的博客 655
上一篇: android activity四种启动模式
下一篇: Android模拟器Genymotion安装使用教程详解
code_dream_wq
博客等级 码龄10年 51粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值