android使用PullToRefresh框架实现ListView下拉刷新上拉加载更多

 更新时间:2017年12月05日 09:43:48   作者:ZhengJiaoCsdn  
这篇文章主要介绍了android使用PullToRefresh框架实现ListView下拉刷新上拉加载更多,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android实现ListView下拉刷新上拉加载更多的具体代码,供大家参考,具体内容如下

其实谷歌官方目前已经推出ListView下拉刷新框架SwipeRefreshLayout,想了解的朋友可以点击 android使用SwipeRefreshLayout实现ListView下拉刷新上拉加载 了解一下;

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

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

上面图片效果使用的是PullToRefresh框架,在我的工程里面没有导入类库和jar包,而是把下拉刷新功能直接抽取出来使用;
当下拉的时候回调监听,在抽取完下拉刷新功能的基础上实现上拉加载更多功能实现也非常简单,所以顺手写上了;
我是从github上下载的Android-PullToRefresh-master框架,在library中抽取的;
首先需要复制的类大概有十个左右:


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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 
 <!-- 我们添加了一个属性:ptr:ptrMode="both" ,意思:上拉和下拉都支持。 
  可选值为:disabled(禁用下拉刷新),pullFromStart(仅支持下拉刷新), 
  pullFromEnd(仅支持上拉刷新),both(二者都支持),manualOnly(只允许手动触发) --> 
 <!-- 
  ptr:ptrAnimationStyle="rotate" 
  FlipLoadingLayout为iOS风格的箭头颠倒的刷新动画 
  ptr:ptrAnimationStyle="flip" 
  RotateLoadingLayout为android风格的图片旋转动画 --> 
 <com.ptrflv.www.pulltorefreshlistview.PullToRefreshListView 
  xmlns:ptr="http://schemas.android.com/apk/res-auto" 
  android:id="@+id/pull_to_refresh_listview" 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content" 
  ptr:ptrMode="both" 
  ptr:ptrAnimationStyle="flip" 
   /> 
 
</LinearLayout>

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

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
 
 <!-- 上拉刷新 --> 
 <!-- …代表三个点 ... --> 
 <string name="pull_to_refresh_pull_label">向下拉刷新…</string> 
 <string name="pull_to_refresh_release_label">松开更新…</string> 
 <string name="pull_to_refresh_refreshing_label">正在加载…</string> 
 
 <!-- 下拉加载更多 --> 
 <string name="pull_to_refresh_from_bottom_pull_label">向下拉加载更多…</string> 
 <string name="pull_to_refresh_from_bottom_release_label">松开加载更多…</string> 
 <string name="pull_to_refresh_from_bottom_refreshing_label">正在加载…</string> 
 
</resources> 

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

public class MainActivity extends Activity { 
 
 private PullToRefreshListView pullToRefreshListView; 
 //adapter的数据源 
 private List<String> numList=new ArrayList<String>(); 
 private ArrayAdapter<String> arrayAdapter; 
  
 @Override 
 protected 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<String>(this, R.layout.item_listview,R.id.textview,numList); 
  pullToRefreshListView.setAdapter(arrayAdapter); 
   
  //设定刷新监听 
  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); 
     
     //代表下拉刷新 
     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

源码下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android悬浮窗的实现(易错点)

    Android悬浮窗的实现(易错点)

    现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示。下面小编来实现一下android 悬浮窗,感兴趣的朋友跟随小编一起看看吧
    2019-10-10
  • Android开发多手指触控事件处理

    Android开发多手指触控事件处理

    这篇文章主要为大家介绍了Android开发多手指触控事件处理教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 详解Flutter WebView与JS互相调用简易指南

    详解Flutter WebView与JS互相调用简易指南

    这篇文章主要介绍了详解Flutter WebView与JS互相调用简易指南,分为JS调用Flutter和Flutter调用JS,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • Android移动应用开发指南之六种布局详解

    Android移动应用开发指南之六种布局详解

    Android应用界面要美观好看,就需要运用到一定的布局技术,Android布局是不可忽视的,是android应用界面开发的重要一环,这篇文章主要给大家介绍了关于Android移动应用开发指南之六种布局的相关资料,需要的朋友可以参考下
    2022-09-09
  • Android中使用Alarm的方法小结

    Android中使用Alarm的方法小结

    Alarm是android提供的用于完成闹钟式定时任务的类,系统通过AlarmManager来管理所有的Alarm,下面这篇文章主要给大家介绍了关于Android中使用Alarm的相关资料,需要的朋友可以参考下。
    2017-05-05
  • Android仿微信主界面的实现方法

    Android仿微信主界面的实现方法

    这篇文章主要为大家详细介绍了Android仿微信主界面的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Android中文件的压缩和解压缩实例代码

    Android中文件的压缩和解压缩实例代码

    这篇文章主要介绍了Android中文件的压缩和解压缩,需要的朋友可以参考下
    2017-03-03
  • 安卓Android Context类实例详解

    安卓Android Context类实例详解

    在开发Android的过程中,总是能遇见Context类或者它的实例.Context类的实例经常被用来提供“应用程序”的引用,下面举例说明Contex类实例详解
    2016-07-07
  • Android编程之Application设置全局变量及传值用法实例分析

    Android编程之Application设置全局变量及传值用法实例分析

    这篇文章主要介绍了Android编程之Application设置全局变量及传值用法,结合实例形式较为详细的分析了全局变量及传值的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • 详解Android MVP开发模式

    详解Android MVP开发模式

    这篇文章主要为大家介绍了Android MVP开发模式的相关资料,需要的朋友可以参考下
    2016-01-01

最新评论