MaterialRefreshLayout+ListView 下拉刷新 上拉加载
效果图是这样的,有入侵式的,非入侵式的,带波浪效果的......就那几个属性,都给出来了,自己去试就行。



下拉刷新 上拉加载 关于下拉刷新-上拉加载的效果,有许许多多的实现方式,百度了一下竟然有几十种第三方的可以实现......
SwipeRefreshLayout是Google官方推出的一个控件,不需要添加依赖什么的,直接使用即可,但是只支持下拉刷新,上拉加载没有实现,包括点击事件什么的也没有很好的集成,如果你的需求仅仅是列表展示,下拉刷新的话不妨一试,还是挺简单的。
BGARefreshLayout支持四种下拉刷新和一种上拉加载效果,也非常不错,值得一试。
还有BRVAH,一个更加强大的第三方库,使用BRVAH可以满足你大部分的需求,本文不做讲解,下篇文章再展开探讨。
BRVAH官网链接:(非常推荐用这个)http://www.recyclerview.org/
本文要讲的是MaterialRefreshLayout,因为仅仅演示刷新和加载效果,所以简单的用了ListView,也没有自己写适配器,简单的用了系统自带的ArrayAdapter。正常应该用RecycleView,毕竟可以自定义事件嘛。
1.首先添加依赖。
compile 'com.cjj.materialrefeshlayout:library:1.3.0'
2.布局文件:
如果复制过去的话可能会报错,没关系,重新加载一下项目就可以了。建议手写。
<com.cjj.MaterialRefreshLayout
android:id="@+id/refresh"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:overlay="false"
app:wave_show="true"
> <ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</com.cjj.MaterialRefreshLayout>
还有几个属性可以自己试一试:
app:wave_height_type="higher" 改变刷新布局的高度
app:wave_color="#61bf5c"改变刷新布局的背景颜色
3.初始化控件并给ListView设置适配器:
private MaterialRefreshLayout mMaterialRefreshLayout;
private ListView mListView;
private ArrayList<String> list = new ArrayList<String>();
private ArrayAdapter mArrayList; mMaterialRefreshLayout = (MaterialRefreshLayout)findViewById(R.id.refresh);
mListView = (ListView) findViewById(R.id.listview);
mArrayList = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
mListView.setAdapter(mArrayList);
/**
* todo 在上拉刷新的时候,判断,是否处于上拉刷新,如果是的话,就禁止在一次刷新,保障在数据加载完成之前
* todo 避免重复和多次加载
*/
private Boolean isLoadMore = true;
4.获取数据(这里用的是假数据):
private void initDate() {
for (int i = ;i<;i++) {
list.add("Test3Test3Test3");
list.add("Test4Test4Test4Test4");
list.add("Test5Test5Test5Test5Test5");
}
}
5.设置允许上拉加载更多,默认只允许下拉刷新不允许上拉加载。
/**
* todo 设置是否上拉加载更多,默认是false,要手动改为true,要不然不会出现上拉加载
*/
mMaterialRefreshLayout.setLoadMore(isLoadMore);
6.设置下拉、上拉的监听事件(重点):
注意事项注释都有标注。
mMaterialRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() {
@Override
public void onRefresh(MaterialRefreshLayout materialRefreshLayout) {
mMaterialRefreshLayout.finishRefreshLoadMore();
//todo 一般加载数据都是在子线程中,这里我用到了handler
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
for (int i = ; i <= ; i++) {
list.add(i,"下拉刷新 " + i);
}
mArrayList.notifyDataSetChanged();//todo 通知刷新
//下拉刷新停止
mMaterialRefreshLayout.finishRefresh();
}
},);
}
//todo 真正用的时候,就会去定义方法,获取数据,一般都是分页,在数据端获取的时候,把页数去增加一,然后在去服务端去获取数据
@Override
public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) {
super.onRefreshLoadMore(materialRefreshLayout);
mMaterialRefreshLayout.finishRefresh();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
isLoadMore = false;//todo 上拉的时候把下拉取消
for (int i = ; i <= ; i++) {
list.add("上拉加载" + i);
}
//todo 通知刷新
mArrayList.notifyDataSetChanged();
/**
* 完成加载数据后,调用此方法,要不然刷新的效果不会消失
*/
mMaterialRefreshLayout.finishRefreshLoadMore();
}
}, );
}
在代码中也可以动态设置各种属性:后两个一个是自动下拉刷新,一个是自动上拉加载
materialRefreshLayout.setIsOverLay(true);
materialRefreshLayout.setWaveShow(false);
materialRefreshLayout.setWaveColor(0xffffffff);
materialRefreshLayout.setLoadMore(true);
materialRefreshLayout.autoRefresh();
aterialRefreshLayout.autoRefreshLoadMore();
总体代码给一个,仅供参考:
private MaterialRefreshLayout mMaterialRefreshLayout;
private ListView mListView;
private ArrayList<String> list = new ArrayList<String>();
private ArrayAdapter mArrayList; /**
* todo 在上拉刷新的时候,判断,是否处于上拉刷新,如果是的话,就禁止在一次刷新,保障在数据加载完成之前
* todo 避免重复和多次加载
*/
private Boolean isLoadMore = true; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_material_refresh_layout);
initDate();
initView();
} //假数据
private void initDate() {
for (int i = ;i<;i++) {
list.add("Test3Test3Test3");
list.add("Test4Test4Test4Test4");
list.add("Test5Test5Test5Test5Test5");
}
} private void initView() {
mMaterialRefreshLayout = (MaterialRefreshLayout)findViewById(R.id.refresh);
mListView = (ListView) findViewById(R.id.listview);
mArrayList = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
mListView.setAdapter(mArrayList); /**
* todo 设置是否上拉加载更多,默认是false,要手动改为true,要不然不会出现上拉加载
*/
mMaterialRefreshLayout.setLoadMore(isLoadMore);
mMaterialRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() {
@Override
public void onRefresh(MaterialRefreshLayout materialRefreshLayout) {
mMaterialRefreshLayout.finishRefreshLoadMore();
//todo 一般加载数据都是在子线程中,这里我用到了handler
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
for (int i = ; i <= ; i++) {
list.add(i,"下拉刷新 " + i);
}
mArrayList.notifyDataSetChanged();//todo 通知刷新 //下拉刷新停止
mMaterialRefreshLayout.finishRefresh();
}
},);
} //todo 真正用的时候,就会去定义方法,获取数据,一般都是分页,在数据端获取的时候,把页数去增加一,然后在去服务端去获取数据
@Override
public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) {
super.onRefreshLoadMore(materialRefreshLayout);
mMaterialRefreshLayout.finishRefresh();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
isLoadMore = false;//todo 上拉的时候把下拉取消
for (int i = ; i <= ; i++) {
list.add("上拉加载" + i);
}
//todo 通知刷新
mArrayList.notifyDataSetChanged(); /**
* 完成加载数据后,调用此方法,要不然刷新的效果不会消失
*/
mMaterialRefreshLayout.finishRefreshLoadMore();
}
}, );
}
});
} public void goBack(View view) {
finish();
}
MaterialRefreshLayout+ListView 下拉刷新 上拉加载的更多相关文章
- Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView
在弄android刷新的时候,可算是耗费了一番功夫,最后发觉有现成的控件,并且非常好用,这里记录一下. 原文是 https://blog.csdn.net/huangxin112/article/de ...
- SwipeRefreshLayout实现下拉刷新上滑加载
1. 效果图 2.RefreshLayout.java package myapplication.com.myapplication; import android.content.Context; ...
- 移动端下拉刷新上拉加载-mescroll.js插件
最近无意间看到有这么一个上拉刷新下拉加载的插件 -- mescroll.js,个人感觉挺好用的,官网地址是:http://www.mescroll.com 然后我就看了一下文档,简单的写了一个小dem ...
- ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多
ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...
- ListView下拉刷新上拉加载更多实现
这篇文章将带大家了解listview下拉刷新和上拉加载更多的实现过程,先看效果(注:图片中listview中的阴影可以加上属性android:fadingEdge="none"去掉 ...
- listview下拉刷新上拉加载扩展(三)-仿最新版美团外卖
本篇是基于上篇listview下拉刷新上拉加载扩展(二)-仿美团外卖改造而来,主要调整了headview的布局,并加了两个背景动画,看似高大上,其实很简单: as源码地址:http://downloa ...
- listview下拉刷新上拉加载扩展(二)-仿美团外卖
经过前几篇的listview下拉刷新上拉加载讲解,相信你对其实现机制有了一个深刻的认识了吧,那么这篇文章我们来实现一个高级的listview下拉刷新上拉加载-仿新版美团外卖的袋鼠动画: 项目结构: 是 ...
- react-native-page-listview使用方法(自定义FlatList/ListView下拉刷新,上拉加载更多,方便的实现分页)
react-native-page-listview 对ListView/FlatList的封装,可以很方便的分页加载网络数据,还支持自定义下拉刷新View和上拉加载更多的View.兼容高版本Flat ...
- 自定义ListView下拉刷新上拉加载更多
自定义ListView下拉刷新上拉加载更多 自定义RecyclerView下拉刷新上拉加载更多 Listview现在用的很少了,基本都是使用Recycleview,但是不得不说Listview具有划时 ...
随机推荐
- 题外话 -- windows10系统C盘空间变大 CPU莫名跑满
场景描述: 安装windows10一段时间了,发现C盘空间越来越小 CPU有时候,莫名其妙的跑满,造成操作卡顿. 如何处理参考: windows10 C盘空间清理:https://jingyan.ba ...
- 再续session和cookie (网络整理)
摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术.本文将详细讨论session的工作机制并且对在Java ...
- Nuget 打包
https://github.com/NuGetPackageExplorer/NuGetPackageExplorer 下载地址 1 打包的dll 中没有依赖 最简单的情况,保证dll放到lib下, ...
- 关于 OpenIdConnect 认证启用 HTTPS 回调 RedirectUri 不生效问题
在搭建 IdentityServer 服务端后,我们尝试使用了 OIDC(OpenID Connect) 的中间件来代替了原先的 Session 系统认证方式,起初采用的是 HTTP 协议,一切都没有 ...
- 全网最详细的启动或格式化zkfc时出现java.net.NoRouteToHostException: No route to host ... Will not attempt to authenticate using SASL (unknown error)错误的解决办法(图文详解)
不多说,直接上干货! 全网最详细的启动zkfc进程时,出现INFO zookeeper.ClientCnxn: Opening socket connection to server***/192.1 ...
- Shell脚本 | 性能测试之启动流量
安卓应用的流量统计有多种方式,点击「阅读原文」可以看到一篇别人写的文章,关于安卓流量数据的获取,写的挺全的,列举了几种不同方式的优劣.(见文末参考链接) 今天我要分享的是通过脚本一键获取应用的启动流量 ...
- Hadoop2源码分析-序列化篇
1.概述 上一篇我们了解了MapReduce的相关流程,包含MapReduce V2的重构思路,新的设计架构,与MapReduce V1的区别等内容,今天我们在来学习下在Hadoop V2中的序列化的 ...
- Django使用Signals监测model字段变化发送通知
上一篇文章<运维效率之数据迁移自动化>中讲到了工单通知,本文将介绍工单通知实现过程中的一些小技巧.所有演示均基于Django2.0 阅读此篇文章你可以: 解锁一个python if的使用新 ...
- IC 设计中DFT的Boundary Scan功能
在很大规模的IC设计中,往往会有一些各种各样的bug出现,不论是在前期design的过程,还是在post silicon流片回来chip的flaw,都会导致chip的功能的失败,时钟频率无法达到期望频 ...
- 大数据之presto
1.概述 Presto是一个分布式SQL查询引擎,用于查询分布在一个或多个不同数据源中的大数据集.presto可以通过使用分布式查询,可以快速高效的完成海量数据的查询.它是完全基于内存的,所以速度非常 ...