android使用SwipeRefreshLayout实现ListView下拉刷新上拉加载

作者:ZhengJiaoCsdn 时间:2022-07-15 08:39:50 

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

android使用SwipeRefreshLayout实现ListView下拉刷新上拉加载

这次使用的是系统的SwipeRefreshLayout实现下拉刷新,和设置ListView的滑动监听判断是否滑动到最底部然后加载更多;
这个要比PullToRefreshListView简单很多,想PullToRefreshListView实现下拉刷新上拉加载的可以看这篇博客:
android使用PullToRefresh框架实现ListView下拉刷新上拉加载更多

至于使用哪一种大家可以根据产品的需求选择,这两种刷新目前为止世面上还是使用PullToRefreshListView的比较多;

首先说下SwipeRefreshLayout的五个方法:

1、setOnRefreshListener():设置手势滑动 * 。
2、setProgressBackgroundColor():设置进度圈的背景色。
3、setColorSchemeResources():设置进度动画的颜色。
4、setRefreshing():设置组件的刷洗状态。
5、setSize():设置进度圈的大小

这个大家简单了解一下,下面代码中都一一用到;

首先说下布局文件,如果想用SwipeRefreshLayout实现下拉刷新必须把ListView写到SwipeRefreshLayout布局里面;


<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/srfl">

<ListView
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:id="@+id/listview" />
</android.support.v4.widget.SwipeRefreshLayout>

我这边是自己写的小Demo所以下拉的时候直接发送一个延时1秒的handler,然后添加数据刷新adapter;
上拉加载更多的时候直接给ListVIew设置了一个滑动监听,判断是否滑动到adapter的最下面,然后加载数据,刷新adapter;


public class MainActivity extends Activity {
private ListView mListView;
private SwipeRefreshLayout swipeRefreshLayout;
private List<String> stringList=new ArrayList<>();
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

for (int x=0 ; x<16;x++){
  stringList.add("新浪微博:搏击爱好者Z"+"---"+x);
 }
 initView();
}

private void initView() {
 swipeRefreshLayout= (SwipeRefreshLayout) findViewById(R.id.srfl);
 //设置进度圈的大小;(这里面只有两个值SwipeRefreshLayout.LARGE和DEFAULT,后者是默认效果)
 swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE);
 //设置进度圈的背景色。这里随便给他设置了一个颜色:浅绿色
 swipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.CYAN);
 //设置进度动画的颜色。这里面最多可以指定四个颜色,我这也是随机设置的,大家知道怎么用就可以了
 swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_orange_dark
   ,android.R.color.holo_blue_dark
   ,android.R.color.holo_red_dark
   ,android.R.color.widget_edittext_dark);
 mListView= (ListView) findViewById(R.id.listview);
 adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, stringList);
 mListView.setAdapter(adapter);

//设置手势滑动 *
 swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
  public void onRefresh() {
   //发送一个延时1秒的handler信息
   handler.sendEmptyMessageDelayed(199,1000);
  }
 });

//给listview设置一个滑动的监听
 mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
  //当滑动状态发生改变的时候执行
  public void onScrollStateChanged(AbsListView view, int scrollState) {
   switch (scrollState){
    //当不滚动的时候
    case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:

//判断是否是最底部
     if(view.getLastVisiblePosition()==(view.getCount())-1){
      for(int x=0;x<5;x++){
       stringList.add(stringList.size(),"魔兽世界"+x);
      }
      adapter.notifyDataSetChanged();
     }
     break;
   }
  }
  //正在滑动的时候执行
  public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
  }
 });
}

private Handler handler=new Handler(){
 @Override
 public void handleMessage(Message msg) {
  if(msg.what==199){
   stringList.add(0,"英雄联盟");
   adapter.notifyDataSetChanged();
   //设置组件的刷洗状态;false代表关闭
   swipeRefreshLayout.setRefreshing(false);
  }
 }
};
}

这里面为了给大家演示SwipeRefreshLayout的几个方法,如果全部使用默认可以把setProgressBackgroundColor():setColorSchemeResources():setSize():这三个方法去掉。
这样代码会更少,默认效果也非常不错,这个看大家需求。

源码下载地址

来源:http://blog.csdn.net/zheng_jiao/article/details/51464981

标签:android,下拉刷新,上拉加载
0
投稿

猜你喜欢

  • redis redisson 集合的使用案例(RList、Rset、RMap)

    2023-11-13 13:50:21
  • Java编程之文件读写实例详解

    2022-01-27 11:13:40
  • Java无限级树(递归)超实用案例

    2023-08-01 13:31:57
  • 浅谈C#多线程简单例子讲解

    2023-06-24 03:03:50
  • SpringBoot配置及使用Schedule过程解析

    2021-12-31 18:47:32
  • Spring Data JPA 设置字段默认值方式

    2021-08-13 07:27:06
  • Android RIL使用详解

    2021-09-30 18:06:45
  • Android显示富文本+夜间深色模式

    2023-11-11 12:33:59
  • java取两个字符串的最大交集

    2021-07-30 17:23:08
  • C#数据表格(DataGridView)控件的应用案例

    2023-04-11 11:10:24
  • C# TabControl手动触发DrawItem的实现

    2023-12-27 17:01:27
  • Java由浅入深刨析继承

    2023-11-23 08:04:24
  • java中Executor,ExecutorService,ThreadPoolExecutor详解

    2023-10-31 10:50:56
  • C#实现猜数字游戏

    2021-11-16 07:29:58
  • MyBatis-Plus实现分页的方法使用详解

    2023-02-14 18:22:16
  • Spring Security安全框架之记住我功能

    2023-08-19 02:38:43
  • IDEA 插件 mapper和xml互相跳转操作

    2021-07-19 02:48:13
  • c# 获取字符串的字节数的方法

    2022-01-17 13:52:50
  • 基于Springboot+Junit+Mockito做单元测试的示例

    2023-01-03 21:15:51
  • idea企业开发之新建各类型项目的详细教程

    2023-02-28 05:27:11
  • asp之家 软件编程 m.aspxhome.com