pulltorefresh(三)自动刷新

继承前面讲的两章,你现在对这第三方自定义控件已经会用了

不过,问题来了,我们有个需求是打开这软件的时候,需要自动刷新,而不是我们手动给他加载数据,怎么弄呢?就像如下图

这个具体怎么实现呢?

其实很简单,只需要把我们前面第一章的第五步改成:

// 设置刷新监听
pListView.setOnRefreshListener( new OnRefreshListener<ListView>() {

    @Override
    public void onRefresh(PullToRefreshBase<ListView> refreshView) {
        Log.d("PullToRefresh","-------onRefresh被调用-------- ShownHeader="+refreshView.isShownHeader()+"  ShownFooter="+refreshView.isShownFooter());
        String str = DateUtils.formatDateTime(MainActivity.this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
        // 上拉加载更多 业务代码
        if (refreshView.isShownFooter()) {
            Log.d("refresh", "-----上拉加载----------");
            refreshView.getLoadingLayoutProxy().setRefreshingLabel("正在加载");
            refreshView.getLoadingLayoutProxy().setPullLabel("上拉加载更多");
            refreshView.getLoadingLayoutProxy().setReleaseLabel("释放开始加载");
            refreshView.getLoadingLayoutProxy().setLastUpdatedLabel("最后加载时间:" + str);
            new MyTask().execute();
        }else{
            Log.d("refresh", "------下拉刷新---------");
            refreshView.getLoadingLayoutProxy().setRefreshingLabel("正在刷新");
            refreshView.getLoadingLayoutProxy().setPullLabel("下拉刷新");
            refreshView.getLoadingLayoutProxy().setReleaseLabel("释放开始刷新");
            refreshView.getLoadingLayoutProxy().setLastUpdatedLabel("最后更新时间:" + str);
            new MyTask().execute();
        }
    }
});
// 设置自动刷新
pListView.setRefreshing(true);

Ps:主要上面红色那一句,设置为自动刷新;

Run->我们发现,效果和我们效果图一样一样的,很棒。但是我们看下日志:

我们惊奇的发现一个问题了:为什么isShownHeader(),isShownFooter()这标示拉是上拉还是下拉的标志都是false呢?

我从源码的角度分析下:其实是由于拉得时候显示出来的view和刷新中出来的view不是同一个view。

setRefreshing(true)最终会到PullToRefreshListView的OnRefresh()方法中:

我们看到了,它被hide了,所以isShown方法才会为false,这下就说得通了,所以我们就用else来捕捉自动刷新;

再说一个用setRefresh(true)的另一常用问题,很多人设置了,但是发现列表头部一直显示在刷新。并且没有调用onRefresh()方法,这是什么原因呢?

是由于我们的适配器是空的,里面没有任何值,简单来说,就像把我第一章初始化适配器的方法,不进行对适配器数据集(adapter.add(?))里面塞数据一样的。

我们看下源码:

在PullToRefreshListView的OnRefresh()方法:

如果适配器为null,或者里面没有数据,就会return这方法,所以造成这结果,那我们怎么处理呢?

pulltorefresh的构建思想。刷新,首先你必须要有数据吧,我才能刷新。

而在一般我们程序开发,都会有缓存机制。首先去读缓存中得数据,然后再去获取网络校验数据完成刷新界面。也就是在适配器初始化好后,立即读缓存,都适配器的数据集塞值。最终设置onRefresh(true)完成自动刷新。

当然我们可以,把源码小小改下,就是把我上图中红色框里面的adapter.isEmpty()去掉,这样就不用必须对初始化好的适配器付完在值才能自动刷新了!

以上便是pulltorefresh的自动刷新内容,谢谢观看!

时间: 2024-08-01 22:55:18

pulltorefresh(三)自动刷新的相关文章

webpack学习(三)之webpack-dev-server不能自动刷新问题

使用webpack-dev-server中遇到不能浏览器无法自动刷新的问题:寻找多方答案后明白了一些: 下面有一些需要注意的点: 1.webpack-dev-server并不能读取你的webpack.config.js的配置output!! 你在webpack.config.js里面的配置output属性是你用webpack打包时候才起作用的,对webpack-dev-server并不起作用 2.webpack-dev-server打包生产的文件并不会添加在你的项目目录中!! 它默认打包的文件名

【webpack】-- 自动刷新

前端需要频繁的修改js和样式,且需要根据浏览器的页面效果不断的做调整:而且往往我们的开发目录和本地发布目录不是同一个,修改之后需要发布一下:另外一点就是并不是所有的效果都可以直接双击页面就能看到,我们常常需要在本地用nginx建一个站点来观察(自己电脑上ok了才放到测试环境去).所以如果要用手工刷新浏览器和手动(或点击)发布,还要启动站点,确实是个不小的体力活.而这三点webpack可以帮我们做到. webpack-dev-server webpack是通过webpack-dev-server(

gulp最佳实践(包含js,css,html预编译,合并,压缩,浏览器自动刷新)

gulp是基于流的自动化构建工具官方网址:http://www.gulpjs.com.cn/ 一.安装需要的模块 1.新建package.json,输入下面的内容 { "name": "autopractice", "version": "1.0.0", "description": "", "main": "index.js", "sc

js自动刷新页面代码

<script language="JavaScript">function myrefresh(){window.location.reload();}setTimeout('myrefresh()',1000); //指定1秒刷新一次</script> 页面自动刷新代码大全1) 自动刷新页面 在 <body> 与 </body> 之间加入: <META http-equiv=refresh content=”10;url=../

【转】新浪微博手机客户端刷新都是手动刷新或者下拉刷新,为什么不设计成自动刷新?

一是将主动权交给用户:二是为用户的流量着想:三是自动刷新容易造成用户的反感(即用户体验差). 1.关于点入时自动刷新 进入时是否自动刷新新浪微博和腾讯微博分成两派. 新浪微博进入时不自动刷新.碎片化的阅读时间,可为用户保留阅读进度:节省用户流量:将阅读主动权交给用户. 腾讯微博进入时自动刷新.此点相较之下不够人性化.不过对比新浪,痛点在于活跃用户少.互动质量差,UGC也较少.对于众多的非活跃用户,下载了客户端,偶尔点进去一次,自动刷新告诉你,有这么多新内容,我还活着啊,我还很活跃啊. 2.关于按

页面自动刷新的几种方式

有时候,为了实时获得后台变化过的数据,需要自动刷新页面,重新获取数据,那么下面就来看看几种自动刷新的方式: 第一种 <meta http-equiv="refresh" content="3"> “3”,很容易猜到,是指刷新间隔时间.此处不指定url,说明是刷新本页面. 第二种 <meta http-equiv="refresh" content="20;url=http://baidu.com"> 同

Browsersync结合gulp和nodemon实现express全栈自动刷新

Browsersync能让浏览器实时.快速响应你的文件更改(html.js.css.sass.less等)并自动刷新页面.更重要的是 Browsersync可以同时在PC.平板.手机等设备下进项调试.你的任何一次代码保存,以上的设备都会同时显示你的改动". Browsersync可以单独使用,也可以集成到gulp和grunt这样的构建工具中使用,在node.js项目中还能结合gulp-nodemon实现全栈的自动刷新,而在移动端设备上同步调试的功能对移动web开发显然是很有帮助的. 相关网站查看

自己动手打造工具系列之自动刷新简历

0×00 背景 话说搞安全的大佬们都非常忙,自己在一步一步成长中无暇顾及其他琐碎的事情,比如让猎头注意到各位大佬.如何让猎头和大厂注意到自己呢?第一.提高自己在整个行业的曝光度:第二.定时刷新自己的简历:还有第三,第四等等,各位发挥脑洞.针对第一点,很多大佬各有自己的办法,但是针对第二点其实我们有全自动化的解决方案,可以为自己相对地节约点时间.小弟今天就带来自己动手打造工具系列之自动刷新简历.本文主要是针对喜欢写工具的童鞋提供一些思路,并一步一步地分析思路和方法,起一个抛砖引玉的作用吧. 0×0

form表单中的button自动刷新页面问题

form表单中如果存在button的话,有可能会出现一个问题:点击button,触发了页面的自动刷新事件. 原因是因为<button>标签默认的类型是submit,即默认的button点击就会触发表单的提交事件. <button></button> <!-- 两者是相当的 --> <button type="sumbit"></button> 解决的办法有三个. 1.在<button>标签中添加属性ty