iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >分享Android中pullToRefresh的使用心得
  • 945
分享到

分享Android中pullToRefresh的使用心得

pulltorefreshAndroid 2022-06-06 09:06:21 945人浏览 泡泡鱼
摘要

pullToRefresh的导入 首先,点击new按钮 -> import Module   然后在 New Module界面选择已经在本地的含有源代码的p

pullToRefresh的导入

首先,点击new按钮 -> import Module

 

然后在 New Module界面选择已经在本地的含有源代码的pullToRefresh。

打开如下图所示的open Module Settings 按钮

 

点击app中的Dependencies 中右边框的"+"按钮,选择第三个 ,如下所示

 

选择Modules : pullToRefreshLibrary ,点击OK

 然后在build.gradle(Module:app)或者你自己要写的那个Android 程序的根文件夹的build.gradle中加入下面一句话

 compile project(':pullToRefreshLibrary')

自此,pullToRefresh已经导入成功,可以新建一个pullToRefrenshListView验证一下。

pullToRefreshListView的基本使用

pullToRefreshListView和ListView的使用基本差的不多,只不过ListView的xml要换成

com.handmark.pulltorefresh.library.PullToRefreshListView

 例子如下:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">
  <com.handmark.pulltorefresh.library.PullToRefreshListView
    xmlns:ptr="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:id="@+id/refresh_list_view"
    ptr:ptrDrawable="@drawable/default_ptr_flip"
    ptr:ptrAnimationStyle="flip"
    ptr:ptrHeaderBackground="#383838"
    ptr:ptrHeaderTextColor="#FFFFFF" >
  </com.handmark.pulltorefresh.library.PullToRefreshListView>
</LinearLayout> 

上面的例子中pullToRefreshListView中多了几个属性 分别以ptr开头,这是指定pullToRefreshListView在刷新的时候出现的特效,比如第一个是指定刷新时显示的图片,第二个是指定刷新的图片以何种方式显示出来,第三个是指定刷新时头部的背景,第四个是指定刷新时头部字体的颜色。

以上这些都可以在代码中设置。

ListView中每个item的xml还是不变的,adapter的使用和写法也是不变的,需要改变的只有设定刷新事件。

接下来在代码中设定pullToRefreshListView的一些基本属性和事件。

步骤一 绑定控件,设置属性

绑定控件代码如下:


 private PullToRefreshListView listview;
listview = (PullToRefreshListView) findViewById(R.id.refresh_list_view); 

设置刷新时显示的刷新状态


 //对pullToListView绑定adapter
listview.setAdapter(adapter);
  
listview.setMode(PullToRefresHBase.Mode.BOTH);
initRefreshListView(); 
initRefreshListView方法设置刷新显示的状态
 public void initRefreshListView() {
  ILoadingLayout Labels = listview.getLoadingLayoutProxy(true, true);
  Labels.setPullLabel("快点拉");
  Labels.setRefreshingLabel("正在拉");
  Labels.setReleaseLabel("放开刷新");
} 

这里通过getLoadingLayoutProxy 方法来指定上拉和下拉时显示的状态的区别,第一个true 代表下来状态 ,第二个true 代表上拉的状态 。如果想区分上拉和下拉状态的不同,可以分别设置getLoadingLayoutProxy ,例子如下:


 public void initRefreshListView(){  
  ILoadingLayout startLabels = pullToRefresh  
        .getLoadingLayoutProxy(true, false);  
  startLabels.setPullLabel("下拉刷新");  
  startLabels.setRefreshingLabel("正在拉");  
  startLabels.setReleaseLabel("放开刷新");  
  ILoadingLayout endLabels = pullToRefresh.getLoadingLayoutProxy(  
        false, true);  
  endLabels.setPullLabel("上拉刷新");  
  endLabels.setRefreshingLabel("正在载入..."); 
  endLabels.setReleaseLabel("放开刷新..."); 

这样pullToRefreshListView刷新时状态就设定好了。

步骤二 pullToRefreshListView监听事件的设置

这里主要设置setOnRefreshListener 事件,根据刚才设置的不同的刷新模式,在里面写的匿名内部类也不一样。

 规则如下:

 如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现onPullDownToRefresh()、onPullUpToRefresh()两个方法。 

如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END,需要设置刷新Listener为OnRefreshListener,同时实现onRefresh()方法。

当然也可以设置为OnRefreshListener2,但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法,Mode.PULL_FROM_END的时候只调用onPullUpToRefresh()方法.

这样在进入该Activity时候,手动上拉和下拉就会实现刷新和加载。

 如果想刚进入Activity的时候就执行加载,则要调用如下方法

 listview.setRefreshing();

接下来只需要在onPullDownToRefresh和onPullUpToRefresh 编写要获取listview新数据的方法。

 我这里的例子如下:


 listview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
   @Override
   public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
      adapter.addToTop();
      new FinishRefresh().execute();
}
   @Override
   public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
      adapter.addToBottom();
      new FinishRefresh().execute();
}
}); 

我这里在自定义的adapter中写了2个新方法 addToTop 和addToBottom 分别在头部加入数据和在尾部加入数据
 方法如下:


private void addToTop() {
  for (int i = 0; i < 2; i++) {
     Item item = new Item();
     item.setText("在头部加入第" + i + "数据");
     item.setImageid(R.mipmap.ic_launcher);
     listItems.add(i, item);
  }
}
private void addToBottom() {
  for (int i = 0; i < 2; i++) {
     Item item = new Item();
     item.setText("在尾部加入第" + i + "数据");
     item.setImageid(R.mipmap.ic_launcher);
     listItems.add(item);
   }
} 

这里并没有考虑去重的问题,就是每次刷新结束后会显示出刷新的结果,当再次刷新后,又会执行和上次一样的结果,实际上,这是不符合逻辑的,当第二次在刷新的时候应该进行判断,如果数据一样就不把数据加入到list当中。

接下来 new FinishRefresh().execute(); 是这里我比较疑惑的一个固定写法,在这个com.handmark.pulltorefresh.library.PullToRefreshListView 框架下,执行onRefreshComplete();方法必须在异步下执行,不能和主进程一起执行,如果直接在下拉,上拉监听方法中写入onRefreshComplete(); 则在实际刷新中刷新状态的显示header是不会收回去的,换句话说 刷新一直不会完成。

所以要在继承AsyncTask的类下调用onRefreshComplete();


 private class FinishRefresh extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... params) {
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {
      }
      return null;
    }
    @Override
    protected void onPostExecute(Void aVoid) {
      listview.onRefreshComplete();
      adapter.notifyDataSetChanged();
    }
  }

至此,pullToRefreshListview就实现了简单的上拉,下拉使用

步骤三 pullToRefresListView 的其他监听方法

关于步骤三今天时间有限,先给大家分享到这里,后续持续更新。

您可能感兴趣的文章:Android scrollToTop实现点击回到顶部(兼容PullTorefreshScrollview)android使用Ultra-PullToRefresh实现下拉刷新自定义代码Android使用PullToRefresh完成ListView下拉刷新和左滑删除功能Android开源项目PullToRefresh下拉刷新功能详解Android下拉刷新控件PullToRefresh实例解析Android使用PullToRefresh实现上拉加载和下拉刷新效果的代码Android实现简单的下拉刷新pulltorefreshAndroid程序开发之使用PullToRefresh实现下拉刷新和上拉加载Android PullToRefreshLayout下拉刷新控件的终结者android使用PullToRefresh框架实现ListView下拉刷新上拉加载更多


--结束END--

本文标题: 分享Android中pullToRefresh的使用心得

本文链接: https://www.lsjlt.com/news/26164.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • win7系统时钟使用技巧心得分享
    Windows 7的一大特色便是引入了“超级任务栏”,除了各种炫目的Aero特效外,一个很明显的改进就是尺寸增大了(应该说“宽度”更精确)。正是有了这个“物质基...
    99+
    2023-05-30
    win7 时钟 使用 技巧 系统
  • Win7下如何正常安装使用AutoCAD2006心得分享
    对于Windows7系统下AUTOCAD2006无法正常安装的问题,特别整理出心得体会分享给大家,当然,使用AutoCAD 2010的朋友们可以略过了。解决方法有两个。  方法一:  1、启用Administrator帐...
    99+
    2023-06-01
    win7安装autocad AutoCAD2006 Win7 心得
  • 基于Mybaits映射的一点心得(分享)
    以前一直使用Hibernate,基本上没用过Mybatis,工作中需要做映射关系,简单的了解下Mybatis的映射。两者相差不多都支持一对一,一对多,多对多,本章简单介绍一对一的使用以及注意点。建表语句:CREATE TABLE `bloc...
    99+
    2023-05-30
    mybatis 映射
  • GNS3的使用心得
          记得最先使用模拟器的时候用的是简单的小模拟器,很多实验都做不了。只能简单的在各种模式间切换有很多命令无法支持,基本没法做实验也就一直是学习理论一直没有机会实践,很多命令看了但记不住。       直到后来接触了一个很不...
    99+
    2023-01-31
    使用心得
  • win2003系统硬盘如何保持稳定使用心得分享
    众所周知,win2003系统是一个很稳定的系统,这样一个稳定的系统在硬盘这个环节上也不能掉链子,硬盘的稳定总体影响着系统的稳定,因此让硬盘更快,让系统更稳定,总结有九个环节,下面就逐一道来。 一、合理使用硬盘 何为合理使...
    99+
    2023-05-30
    win2003 系统硬盘 系统 心得 硬盘
  • MySQL事务的基础学习以及心得分享
    这篇文章主要介绍了MySQL事务的基础学习以及心得分享,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。事务是逻辑上的一组操作,组成这组操作的各...
    99+
    2024-04-02
  • Mybatis中isNotNull与isNotEmpty的使用心得
    目录isNotNull与isNotEmpty使用心得具体业务需求是这样的看一下下面2个SQL语句isNull, isNotNull与isEmpty, isNotEmpty区别例子is...
    99+
    2024-04-02
  • Android中Intent组件的入门学习心得
    目录什么是 Intent ?Intent 的类型?Intent 的组成显式 Intent 的使用隐式 Intent 的使用总结什么是 Intent ? Intent是Android开...
    99+
    2024-04-02
  • Spring中Transactional注解使用的心得(推荐)
    事务特性 @Transactional注解是用于事务控制的,需要知道事务的ACID特征:即原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Is...
    99+
    2022-11-13
    Spring Transactional注解 Spring Transactional使用
  • 学习Python的笔记该如何整理?分享你的心得。
    Python是一门高效、易学、易用的编程语言,越来越多的人选择学习它。在学习Python的过程中,难免会遇到大量的知识点和代码,如何将这些知识点和代码整理好,成为我们需要面对的一个问题。在本文中,我将分享我自己在学习Python时,整理笔...
    99+
    2023-08-29
    path 二维码 学习笔记
  • PyCharm激活攻略分享:让你的编程更得心应手
    PyCharm激活攻略分享:让你的编程更得心应手 对于许多Python开发者来说,PyCharm是一款常用的集成开发环境(IDE),提供了强大的功能,方便编写、调试和管理Python代...
    99+
    2024-02-22
    编程 pycharm 激活
  • 关于react-router中的Prompt组件使用心得
    目录Prompt组件作用引入Prompt组件在最近的react项目中, 遇到了一个需求, 点击图片的时候, 会出现一个大图预览, 其实就是一个遮罩层, 专门用来显示大图的, 但因为是...
    99+
    2023-01-17
    react router中Prompt组件 react router组件 Prompt组件
  • java Lambda表达式的使用心得
    目录Lambda表达式的心得Lambda表达式法传统方法使用Lambda表达式 你首先要知道的Lambda表达式的技巧Lambda表达式只能用来简化仅包含一个public方法的接口的...
    99+
    2024-04-02
  • SQL优化中SQLT的使用心得是怎样的
    这篇文章给大家介绍SQL优化中SQLT的使用心得是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、SQLT背景介绍SQLTXPLAIN(简称SQLT)是ORACLE  ...
    99+
    2024-04-02
  • Android WebRTC 对 AudioRecord 的使用技术分享
    目录一、创建和初始化二、启动三、读数据四、停止和销毁前言: AudioRecord 是 Android 基于原始PCM音频数据录制的类,WebRCT 对其封装的代码位置位于org/w...
    99+
    2024-04-02
  • Python装饰器的两种使用心得
    装饰器的基础使用(装饰带参函数) def decorator(func): def inner(info): print('inner') ...
    99+
    2024-04-02
  • 使用pbdigg的心得感受是怎么样的
    使用pbdigg的心得感受是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。接触PBdIGG到今天已经是第六天了,有很多心得分享给大家,首先我觉得它是一款非常y优秀的ph...
    99+
    2023-06-12
  • jQuery Ajax使用心得及注意事项分别是什么
    jQuery Ajax使用心得及注意事项分别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 IE7及以...
    99+
    2024-04-02
  • PHP开发心得分享:掌握各种功能实现的经验与建议
    在当前互联网高速发展的时代,PHP作为一种服务器端脚本语言,被越来越多的开发者所采用。PHP具有简单易学、灵活、开源免费等优势,可以快速开发各种网站和Web应用。然而,作为一名PHP开发者,要想在激烈的竞争中脱颖而出并写出高效稳定的代码,还...
    99+
    2023-11-22
    开发 经验 PHP
  • MyBatis插入Insert、InsertSelective的区别及使用心得
    目录MyBatis插入Insert、InsertSelective的区别这里说一下两者的区别笔者反思但是为什么会有这两种方法呢Mybatis选择插入,选择更新 Update...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作