android Android-PullToRefresh 下拉刷新
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 下拉刷新的更多相关文章
- Android PullToRefresh 下拉刷新,上拉很多其它,支持ScrollView,ListView,可方便拓展GridView,WebView等
在写着东西之前.从网上找到非常多这方面的源代码,可是基本没有找到惬意的.包含在GitHub上的比較有名的Android-PullToRefresh-master.思来想去还是自己写吧.当然当中借鉴了一 ...
- .Net 转战 Android 4.4 日常笔记(10)--PullToRefresh下拉刷新使用
下拉刷新很多地方都用到了,新浪微博,微信,百度新闻 这里我们使用一个开源的库叫:PullToRefresh 开源地址:https://github.com/chenyoca/pull-to-refre ...
- Android PullToRefresh下拉刷新控件的简单使用
PullToRefresh这个开源库早就听说了,不过一直没用过.作为一个经典的的开源库,我觉得还是有必要认识一下. 打开github上的网址:https://github.com/chrisbanes ...
- Android StaggeredGrid 加下拉刷新功能 PullToRefresh
https://github.com/etsy/AndroidStaggeredGrid 用的github上面提供瀑布流,继承于abslistview,回收机制不错,并且提供了OnScrollLis ...
- android控件 下拉刷新pulltorefresh
外国人写的下拉刷新控件,我把他下载下来放在网盘,有时候訪问不了github 支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.GridV ...
- Android内置下拉刷新组件SwipeRefreshLayout
也许下拉刷新之前,你可能会使用一些第三方的开源库,例如PullToRefresh, ActionBar-PullToRefresh等待,但现在有的正式组成部分---SwipeRefreshLayout ...
- Android中实现下拉刷新
需求:项目中的消息列表界面要求实现类似sina微博的下拉刷新: 思路:一般的消息列表为ListView类型,将list加载到adapter中,再将adapter加载到 ListView中,从而实现消息 ...
- Android PullToRrefresh 自定义下拉刷新动画 (listview、scrollview等)
PullToRefreshScrollView 自定义下拉刷新动画,只需改一处. 以下部分转载自http://blog.csdn.net/superjunjin/article/details/450 ...
- Android之自定义控件-下拉刷新
实现效果: 图片素材: --> 首先, 写先下拉刷新时的刷新布局 pull_to_refresh.xml: <resources> <string name=& ...
- Android SwipeRefreshLayout 官方下拉刷新控件介绍
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24521483 下面App基本都有下拉刷新的功能,以前基本都使用XListView ...
随机推荐
- DDD:小议 BoundexContext 设计
背景 看了这篇文章:Coding for Domain-Driven Design: Tips for Data-Focused Devs,对 BoundedContext 的设计有了一点新的体会,记 ...
- 【转载】dirs、pushd、popd指令
转载自:http://hi.baidu.com/linuxtrip/item/47a38c8eec00e98f4414cfb7 一.目录栈指令 目录栈是用户最近访问过的系统目录列表,并以堆栈的形式管理 ...
- python读取xml文件
关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码.这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用python 来读取xml 文件. 什么是 ...
- ionic+angular+cordova 安卓环境搭建
1.java环境配置 下载java jdk 百度搜索java jdk安装完后在cmd窗口输入Java -version 显示以下即为安装成功.然后把java jdk配置到环境变量. (1)选择[新建系 ...
- 50 Android Hacks阅读笔记
Hack 1.善用weightSum和layout_weight. 问题提出:尝试做一个button的宽度是父View的一半的效果. 关键词:weightSum = 1 , layout_weight ...
- Android 学习笔记之Volley开源框架解析(二)
PS:Volley已经学完,可以安心的写一下博客总结一下了... 学习内容: 1.Request的完整封装... 2.RetryPolicy,DefaultRetryPolicy(请求重试策略源码解析 ...
- 一起Polyfill系列:Function.prototype.bind的四个阶段
昨天边参考es5-shim边自己实现Function.prototype.bind,发现有不少以前忽视了的地方,这里就作为一个小总结吧. 一.Function.prototype.bind的作用 其实 ...
- BZOJ1087状压DP 解题报告
1087: [SCOI2005]互不侵犯King Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的 ...
- servlet中的细节
Get方法有大小限制:1024个字符.这些信息使用 Query_String头传递,并通过Query_String环境变量访问.Post方法:请求体信息使用FromData头传递.读取所有表单参数:g ...
- Node.js爬虫抓取数据 -- HTML 实体编码处理办法
cheerio DOM化并解析的时候 1.假如使用了 .text()方法,则一般不会有html实体编码的问题出现 2.如果使用了 .html()方法,则很多情况下(多数是非英文的时候)都会出现,这时, ...