1、github下载地址

原作者:  https://github.com/chrisbanes/Android-PullToRefresh

我自己的:  https://github.com/zyj1609wz/Android-PullToRefresh

2、使用方法

listview  布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.aa.MainActivity"
tools:ignore="MergeRootFrame" > <com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:listSelector="#00000000"
ptr:ptrMode="both" /> </LinearLayout>

常用的方法

package com.example.aa;
import java.util.ArrayList;
import java.util.List;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnLastItemVisibleListener;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import android.support.v7.app.ActionBarActivity;
import android.text.format.DateUtils;
import android.widget.ListView;
import android.widget.Toast;
import android.os.AsyncTask;
import android.os.Bundle; public class MainActivity extends ActionBarActivity {
PullToRefreshListView pullToRefreshListView ;
ListView listView ; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); pullToRefreshListView = (PullToRefreshListView) findViewById( R.id.listview ) ; pullToRefreshListView.setOnRefreshListener( new OnRefreshListener<ListView>() { @Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),
DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL ) ; //最后一次刷新的时间
refreshView.getLoadingLayoutProxy().setLastUpdatedLabel( "上次刷新时间 " + label); //设置刷新图标 下拉的时候显示的内容
refreshView.getLoadingLayoutProxy().setLoadingDrawable(getResources().getDrawable( R.drawable.ic_launcher) ); //下拉完成后,还没有刷新时 显示的内容
refreshView.getLoadingLayoutProxy().setReleaseLabel( "默默地么么哒!!" ); //松开手,正在刷新时 ,显示的内容
refreshView.getLoadingLayoutProxy().setRefreshingLabel( "啦啦啦啦啦" ); Toast.makeText( MainActivity.this , "刷新了", Toast.LENGTH_SHORT ).show();
new GetDataTask().execute( ) ;
}
}); //listview 滑到 最后一项
pullToRefreshListView.setOnLastItemVisibleListener( new OnLastItemVisibleListener() {
@Override
public void onLastItemVisible() {
Toast.makeText( MainActivity.this , "listview到底了", Toast.LENGTH_SHORT ).show() ;
}
}); pullToRefreshListView.setMode( Mode.PULL_FROM_START ); listView = pullToRefreshListView.getRefreshableView() ; listView.setAdapter( new Adapter( this , getData() )); /**
* 程序进来就执行刷新数据,自动执行刷新
*/
pullToRefreshListView.setRefreshing(); } /**
* @author admin
* pullToRefreshListView.onRefreshComplete(); 这一句最好放在异步里面写
*
*/
private class GetDataTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
try {
Thread.sleep( 500 );
} catch (InterruptedException e) {
}
return "" ;
} @Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
pullToRefreshListView.onRefreshComplete();
}
} List<String> getData(){
List<String> list = new ArrayList<String>() ;
for( int i = 0 ; i < 100 ; i ++) {
list.add( "ddd") ;
}
return list ;
} }

刷新模式

    //向下拉
pullToRefreshListView.setMode( Mode.PULL_FROM_START ); //向上拉
pullToRefreshListView.setMode( Mode.PULL_FROM_END ); //同时使用 下拉 和 上拉
pullToRefreshListView.setMode( Mode.BOTH ); /不启用刷新功能
pullToRefreshListView.setMode( Mode.DISABLED );

获取当前的刷新模式

//获取当前的刷新模式
if( pullToRefreshListView.getMode() == Mode.BOTH ){
Toast.makeText( MainActivity.this , "当前的刷新模式是 " + pullToRefreshListView.getMode() ,
Toast.LENGTH_SHORT ).show();
}

设置刷新时的声音

         /**
* Add Sound Event Listener
*/
SoundPullEventListener<ListView> soundListener = new SoundPullEventListener<ListView>(this);
soundListener.addSoundEvent(State.PULL_TO_REFRESH, R.raw.a1 ); //开始刷新显示的声音
soundListener.addSoundEvent(State.RESET, R.raw.a2 ); //刷新完成后,显示的声音
soundListener.addSoundEvent(State.REFRESHING, R.raw.a3 ); //正在刷新显示的声音
pullToRefreshListView.setOnPullEventListener(soundListener);

设置 下拉刷新 和 上拉加载 更多 的监听方法

    pullToRefreshListView.setOnRefreshListener( new Refresh() ) ;

     /**
* 监听方法
* @author admin
*/
class Refresh implements OnRefreshListener2<ListView> {
//下拉
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { } //上拉
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { }
}

设置正在刷新时,listview是否可以滚动

   //正在刷新的时候,listView 禁止滚动
pullToRefreshListView.setScrollingWhileRefreshingEnabled( false ); //正在刷新的时候,listView 可以滚动
pullToRefreshListView.setScrollingWhileRefreshingEnabled( true );

设置刷新时显示的字体的颜色

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.aa.MainActivity"
tools:ignore="MergeRootFrame" > <com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/listview"
android:background="#ffffff"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:listSelector="#00000000"
ptr:ptrHeaderTextColor="#FF9900"
ptr:ptrHeaderSubTextColor="#330099"
ptr:ptrMode="both" /> <!-- ptrHeaderTextColor 刷新提示显示的颜色 -->
<!-- ptrHeaderSubTextColor 刷新提示子选项颜色值 --> </LinearLayout>

运行结果

分别设置 下拉 和 上拉 显示的字体

        //得到下拉时候显示的ILoadingLayout
ILoadingLayout startLayout = pullToRefreshListView.getLoadingLayoutProxy( true , false ) ;
startLayout.setPullLabel("你可劲拉,拉...下拉");// 刚下拉时,显示的提示
startLayout.setRefreshingLabel("好嘞,正在刷新...下拉");// 刷新时
startLayout.setReleaseLabel("你敢放,我就敢刷新...下拉");// 下来达到一定距离时,显示的提示 //得到上拉时候显示的ILoadingLayout
ILoadingLayout endLayout = pullToRefreshListView.getLoadingLayoutProxy( false , true ) ;
endLayout.setPullLabel("你可劲拉,拉... 上拉");// 刚下拉时,显示的提示
endLayout.setRefreshingLabel("好嘞,正在刷新...上拉");// 刷新时
endLayout.setReleaseLabel("你敢放,我就敢刷新...上拉");// 下来达到一定距离时,显示的提示

常用的 xml 配置

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.aa.MainActivity"
tools:ignore="MergeRootFrame" > <com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:gravity="center"
android:listSelector="#00000000"
ptr:ptrHeaderBackground="@drawable/background"
ptr:ptrHeaderSubTextColor="#330099"
ptr:ptrHeaderTextColor="#B26B00"
ptr:ptrListViewExtrasEnabled="false"
ptr:ptrMode="both"
ptr:ptrRefreshableViewBackground="@drawable/b2"
ptr:ptrRotateDrawableWhilePulling="false"
ptr:ptrScrollingWhileRefreshingEnabled="true"
ptr:ptrShowIndicator="true" /> <!-- ptrHeaderTextColor 刷新提示显示的颜色 -->
<!-- ptrHeaderSubTextColor 刷新提示子选项颜色值 -->
<!-- ptr:ptrHeaderBackground 上拉背景图 -->
<!-- ptrShowIndicator 右上角显示的小图标 -->
<!-- ptrRefreshableViewBackground 整个listview的背景 -->
<!-- ptrScrollingWhileRefreshingEnabled 刷新的时候,是否允许ListView或GridView滚动。觉得为true比较好。 -->
<!-- ptrListViewExtrasEnabled Footer以何种方式加入mPullRefreshListView,true为headView方式加入,就是滚动时刷新头部会一起滚动。 -->
<!-- ptrRotateDrawableWhilePulling 当动画设置为rotate时,下拉是是否旋转。 --> <!-- ptr:ptrAnimationStyle 的取值:flip(翻转动画), rotate(旋转动画) 。 -->
<!-- ptr:ptrDrawable 则就是设置图标了。 --> </LinearLayout>

运行结果

 3、不太常用的东西

1、如何 关闭 log 日志输出 ?

PullToRefresh 默认是开启日志输出的 。 在  PullToRefreshBase 里面可以看到 static final boolean DEBUG = true ;

true : 输出日志 。   false : 不输出日志

android Android-PullToRefresh 下拉刷新的更多相关文章

  1. Android PullToRefresh 下拉刷新,上拉很多其它,支持ScrollView,ListView,可方便拓展GridView,WebView等

    在写着东西之前.从网上找到非常多这方面的源代码,可是基本没有找到惬意的.包含在GitHub上的比較有名的Android-PullToRefresh-master.思来想去还是自己写吧.当然当中借鉴了一 ...

  2. .Net 转战 Android 4.4 日常笔记(10)--PullToRefresh下拉刷新使用

    下拉刷新很多地方都用到了,新浪微博,微信,百度新闻 这里我们使用一个开源的库叫:PullToRefresh 开源地址:https://github.com/chenyoca/pull-to-refre ...

  3. Android PullToRefresh下拉刷新控件的简单使用

    PullToRefresh这个开源库早就听说了,不过一直没用过.作为一个经典的的开源库,我觉得还是有必要认识一下. 打开github上的网址:https://github.com/chrisbanes ...

  4. Android StaggeredGrid 加下拉刷新功能 PullToRefresh

    https://github.com/etsy/AndroidStaggeredGrid  用的github上面提供瀑布流,继承于abslistview,回收机制不错,并且提供了OnScrollLis ...

  5. android控件 下拉刷新pulltorefresh

    外国人写的下拉刷新控件,我把他下载下来放在网盘,有时候訪问不了github 支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.GridV ...

  6. Android内置下拉刷新组件SwipeRefreshLayout

    也许下拉刷新之前,你可能会使用一些第三方的开源库,例如PullToRefresh, ActionBar-PullToRefresh等待,但现在有的正式组成部分---SwipeRefreshLayout ...

  7. Android中实现下拉刷新

    需求:项目中的消息列表界面要求实现类似sina微博的下拉刷新: 思路:一般的消息列表为ListView类型,将list加载到adapter中,再将adapter加载到 ListView中,从而实现消息 ...

  8. Android PullToRrefresh 自定义下拉刷新动画 (listview、scrollview等)

    PullToRefreshScrollView 自定义下拉刷新动画,只需改一处. 以下部分转载自http://blog.csdn.net/superjunjin/article/details/450 ...

  9. Android之自定义控件-下拉刷新

    实现效果: 图片素材:         --> 首先, 写先下拉刷新时的刷新布局 pull_to_refresh.xml: <resources> <string name=& ...

  10. Android SwipeRefreshLayout 官方下拉刷新控件介绍

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24521483 下面App基本都有下拉刷新的功能,以前基本都使用XListView ...

随机推荐

  1. 在MACOS上实现交叉编译

    在嵌入式开发过程中,设备的存储空间和运算能力通常会比较低,这时候,比如要编译一个linux的内核,嵌入式设备就不能胜任了,所以,实现交叉编译还是很必要的.通过交叉编译,我们就能够在我们的pc上编译出能 ...

  2. 队列queue的C实现

    头文件—————————————————————————————— #ifndef _QUEUE_H_ #define _QUEUE_H_ #include <stdlib.h> #def ...

  3. Android SDK之API Level

    Android SDK之API Level Android SDK API_LEVEL Platform Version API Level VERSION_CODE Android 4.2, 4.2 ...

  4. Zookeeper集群部署

    一. 部署前的准备工作 保证各个主机之间能够正常通信,最好是在同一网段. 修改host文件,加入IP和主机名的映射.方法为修改/etc/hosts和etc/hostname文件,不同的Linux发行版 ...

  5. python编码声明的位置很重要

    python在3.x版本之前,编码一直是一个很头痛的问题.在代码中如果要使用中文,通常都要在文件的头部注明# -*- coding:utf-8 -*- 这样IDE或者解释器才会智能的转换编码. 这其中 ...

  6. ASP.NET MVC和WebForm 轻松实现前端和后端的双重验证 jquery.validate+ValidationSugar

    上次不足的改进 可能上一个贴子给大家带来很多误解,所以我这次把DEMO完善了两个版本 [ASP.NET WEBFROM]和[ ASP.NET MVC] 修改了一些BUG,并且修改了一些细了 在上个贴子 ...

  7. C#ASP.NET 通用扩展函数之 IsWhat 简单好用

    好东西都需要人去整理.分类 注意:需要引用命名空间 SyntacticSugar 用法: /***扩展函数名细***/ //[IsInRange] int num = 100; //以前写法 if ( ...

  8. XPATH使用总结

    最近公司里需要写一些爬虫项目,所以去接触学习了xpath的内容.在w3c上给出了xpath的语法,但是我感觉不全,而且讲得也不详细,我又去网上找了一些文章,总结一下. 这几个都是比较常用的,能解决基本 ...

  9. 五、Request

    1.      Request 由于python函数所有变量都没有显示类型声明,特别是函数的输入参数,输出参数,因此在阅读代码时会造成比较大的困扰,比如大部分处理函数都有request输入参数,不同模 ...

  10. ADO.NET学习系列(一)

    一.ADO.NET基础 程序和数据库交互,要通过ADO.NET进行:通过ADO.NET就能在数据库中执行SQL了.ADO.NET中提供了对不同数据库的统一操作接口(ODBC).另外还有一种操作数据库的 ...