其实谷歌官方目前已经推出ListView下拉刷新框架SwipeRefreshLayout,想了解的朋友可以点击 http://blog.csdn.net/zheng_jiao/article/details/51464981 了解一下;

大家不难发现当你使用SwipeRefreshLayout下拉的时候布局文件不会跟着手势往下滑,而且想要更改这个缺陷好像非常不容易。

虽然SwipeRefreshLayout非常简单易懂,但是需求需要下拉刷新的时候跟着手势下滑就不能用SwipeRefreshLayout了;

 

上面图片效果使用的是PullToRefresh框架,在我的工程里面没有导入类库和jar包,而是把下拉刷新功能直接抽取出来使用;

当下拉的时候回调监听,在抽取完下拉刷新功能的基础上实现上拉加载更多功能实现也非常简单,所以顺手写上了;

我是从github上下载的Android-PullToRefresh-master框架,在library中抽取的;

首先需要复制的类大概有十个左右:

然后跟进报错查看需要什么文件就复制什么文件;把错误搞定之后首先来看下布局:

 

        


值得注意的是默认情况下下拉刷新的执行动画中显示的文本是英文,这里我们需要手动修改pull_refresh_strings.xml中的内容:

 

 

<?xml version="1.0" encoding="utf-8"?>            向下拉刷新…    松开更新…    正在加载…        向下拉加载更多…    松开加载更多…    正在加载…


下面是调用下拉刷新和上下加载更多的代码:

 

 

public class MainActivity extends Activity {private PullToRefreshListView pullToRefreshListView;//adapter的数据源private List numList=new ArrayList();private ArrayAdapter arrayAdapter; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);pullToRefreshListView=(PullToRefreshListView) findViewById(R.id.pull_to_refresh_listview);//初始化数据for(int x=0;x<18;x++){numList.add(""+x);}arrayAdapter = new ArrayAdapter(this, R.layout.item_listview,R.id.textview,numList);pullToRefreshListView.setAdapter(arrayAdapter);//设定刷新监听 pullToRefreshListView.setOnRefreshListener(new OnRefreshListener() {@Overridepublic void onRefresh(PullToRefreshBase refreshView) { String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),                           DateUtils.FORMAT_SHOW_TIME  | DateUtils.FORMAT_SHOW_DATE  | DateUtils.FORMAT_ABBREV_ALL);                    // 显示最后更新的时间                   refreshView.getLoadingLayoutProxy() .setLastUpdatedLabel(label);                                  //代表下拉刷新                 if(refreshView.getHeaderLayout().isShown()){                                  new Thread(){                 public void run() {                 try {                 sleep(1000);                                  handler.sendEmptyMessage(99);                                  } catch (InterruptedException e) {                 e.printStackTrace();                 }                 };                 }.start();                 }                                  //代表下拉刷新                 if(refreshView.getFooterLayout().isShown()){                 new Thread(){                 public void run() {                 try {                 sleep(1000);                                  handler.sendEmptyMessage(98);                                  } catch (InterruptedException e) {                 e.printStackTrace();                 }                 };                 }.start();                 }}});}private Handler handler=new Handler(){public void handleMessage(android.os.Message msg) {if(msg.what==99){numList.add(0, "英雄联盟");arrayAdapter.notifyDataSetChanged();//关闭刷新的动画pullToRefreshListView.onRefreshComplete(); }if(msg.what==98){numList.add(numList.size(), "魔兽世界");arrayAdapter.notifyDataSetChanged();//关闭刷新的动画pullToRefreshListView.onRefreshComplete(); }};};}


在判断上拉刷新和下拉加载的时候

 

refreshView.getFooterLayout().isShown()

refreshView.getHeaderLayout().isShown()会报错,因为PullToRefreshBase这两个方法默认不是共有方法,我们需要手动该更为public

 

源码下载

   

更多相关文章

  1. [已解决]Android(安卓)ListView EditView 获取焦点问题
  2. 关于Android中自定义ClassLoader耗时问题的追查
  3. android动态加载外部资源文件
  4. 安卓加载模式(Android(安卓)LauncherMode)
  5. Android快速开发框架——Afinal 0.5 发布!
  6. android webview用法小结1
  7. [Android]Fragment进行show和hide时候刷新数据
  8. android listview 删除item 刷新 notifyDataSetChanged()失效问
  9. Android使用webview控件加载本地html,通过Js与后台Java实现数据的

随机推荐

  1. 使用ViewFlipper来组织控件
  2. Android(安卓)NDK编译C/C++为so共享对象
  3. 将Android DHCPInfo 属性转换为int类型(使
  4. Android有趣的全透明效果--Activity及Dia
  5. 实例:在Android调用WCF服务(wcf restful)
  6. Android开发资源完全汇总
  7. android 学习RxJava+Retrofit的资料
  8. Android EditText光标颜色 与inputType
  9. android 分辨率调试
  10. Android修行之路——Android程序设计基础