资讯专栏INFORMATION COLUMN

MaterialRefreshLayout+ListView 下拉刷新 上拉加载

番茄西红柿 / 362人阅读

效果图是这样的,有入侵式的,非入侵式的,带波浪效果的......就那几个属性,都给出来了,自己去试就行。

 

下拉刷新 上拉加载 关于下拉刷新-上拉加载的效果,有许许多多的实现方式,百度了一下竟然有几十种第三方的可以实现......

SwipeRefreshLayout是Google官方推出的一个控件,不需要添加依赖什么的,直接使用即可,但是只支持下拉刷新,上拉加载没有实现,包括点击事件什么的也没有很好的集成,如果你的需求仅仅是列表展示,下拉刷新的话不妨一试,还是挺简单的。

BGARefreshLayout支持四种下拉刷新和一种上拉加载效果,也非常不错,值得一试。

还有BRVAH,一个更加强大的第三方库,使用BRVAH可以满足你大部分的需求,本文不做讲解,下篇文章再展开探讨。

BRVAH官网链接:(非常推荐用这个)http://www.recyclerview.org/

 

本文要讲的是MaterialRefreshLayout,因为仅仅演示刷新和加载效果,所以简单的用了ListView,也没有自己写适配器,简单的用了系统自带的ArrayAdapter。正常应该用RecycleView,毕竟可以自定义事件嘛。

1.首先添加依赖。

compile com.cjj.materialrefeshlayout:library:1.3.0

2.布局文件:

如果复制过去的话可能会报错,没关系,重新加载一下项目就可以了。建议手写。

 1   
10   
11       
15 

还有几个属性可以自己试一试:

app:wave_height_type="higher" 改变刷新布局的高度
app:wave_color="#61bf5c"改变刷新布局的背景颜色

 

3.初始化控件并给ListView设置适配器:

 1 private MaterialRefreshLayout mMaterialRefreshLayout;
 2 private ListView mListView;
 3 private ArrayList list = new ArrayList();
 4 private ArrayAdapter mArrayList;
 5 
 6 
 7 
 8 mMaterialRefreshLayout = (MaterialRefreshLayout)findViewById(R.id.refresh);
 9 mListView = (ListView) findViewById(R.id.listview);
10 mArrayList = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
11 mListView.setAdapter(mArrayList);
1     /**
2      * todo 在上拉刷新的时候,判断,是否处于上拉刷新,如果是的话,就禁止在一次刷新,保障在数据加载完成之前
3      * todo 避免重复和多次加载
4      */
5     private Boolean isLoadMore = true;

 

4.获取数据(这里用的是假数据):

1     private void initDate() {
2         for (int i = 0;i<6;i++) {
3             list.add("Test3Test3Test3");
4             list.add("Test4Test4Test4Test4");
5             list.add("Test5Test5Test5Test5Test5");
6         }
7     }

5.设置允许上拉加载更多,默认只允许下拉刷新不允许上拉加载。

        /**
         * todo 设置是否上拉加载更多,默认是false,要手动改为true,要不然不会出现上拉加载
         */
        mMaterialRefreshLayout.setLoadMore(isLoadMore);

6.设置下拉、上拉的监听事件(重点):

注意事项注释都有标注。

 

 1             mMaterialRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() {
 2             @Override
 3             public void onRefresh(MaterialRefreshLayout materialRefreshLayout) {
 4                 mMaterialRefreshLayout.finishRefreshLoadMore();
 5                 //todo 一般加载数据都是在子线程中,这里我用到了handler
 6                 new Handler().postDelayed(new Runnable() {
 7                     @Override
 8                     public void run() {
 9                         for (int i = 0; i <= 3; i++) {
10                             list.add(i,"下拉刷新 " + i);
11                         }
12                         mArrayList.notifyDataSetChanged();//todo 通知刷新
13 
14                         //下拉刷新停止
15                         mMaterialRefreshLayout.finishRefresh();
16                     }
17                 },3000);
18             }
19 
20 
21 
22 
23 
24             //todo 真正用的时候,就会去定义方法,获取数据,一般都是分页,在数据端获取的时候,把页数去增加一,然后在去服务端去获取数据
25             @Override
26             public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) {
27                 super.onRefreshLoadMore(materialRefreshLayout);
28                 mMaterialRefreshLayout.finishRefresh();
29                 new Handler().postDelayed(new Runnable() {
30                     @Override
31                     public void run() {
32                         isLoadMore = false;//todo 上拉的时候把下拉取消
33                         for (int i = 0; i <= 3; i++) {
34                             list.add("上拉加载" + i);
35                         }
36                         //todo 通知刷新
37                         mArrayList.notifyDataSetChanged();
38 
39                         /**
40                          * 完成加载数据后,调用此方法,要不然刷新的效果不会消失
41                          */
42                         mMaterialRefreshLayout.finishRefreshLoadMore();
43                     }
44                 }, 3000);
45             }

在代码中也可以动态设置各种属性:后两个一个是自动下拉刷新,一个是自动上拉加载

1 materialRefreshLayout.setIsOverLay(true);
2 materialRefreshLayout.setWaveShow(false);
3 materialRefreshLayout.setWaveColor(0xffffffff);
4 materialRefreshLayout.setLoadMore(true);
5 materialRefreshLayout.autoRefresh();
6 aterialRefreshLayout.autoRefreshLoadMore();

 

 

 

总体代码给一个,仅供参考:

 1     private MaterialRefreshLayout mMaterialRefreshLayout;
 2     private ListView mListView;
 3     private ArrayList list = new ArrayList();
 4     private ArrayAdapter mArrayList;
 5 
 6     /**
 7      * todo 在上拉刷新的时候,判断,是否处于上拉刷新,如果是的话,就禁止在一次刷新,保障在数据加载完成之前
 8      * todo 避免重复和多次加载
 9      */
10     private Boolean isLoadMore = true;
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_material_refresh_layout);
16         initDate();
17         initView();
18     }
19 
20     //假数据
21     private void initDate() {
22         for (int i = 0;i<6;i++) {
23             list.add("Test3Test3Test3");
24             list.add("Test4Test4Test4Test4");
25             list.add("Test5Test5Test5Test5Test5");
26         }
27     }
28 
29     private void initView() {
30         mMaterialRefreshLayout = (MaterialRefreshLayout)findViewById(R.id.refresh);
31         mListView = (ListView) findViewById(R.id.listview);
32         mArrayList = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
33         mListView.setAdapter(mArrayList);
34 
35         /**
36          * todo 设置是否上拉加载更多,默认是false,要手动改为true,要不然不会出现上拉加载
37          */
38         mMaterialRefreshLayout.setLoadMore(isLoadMore);
39         mMaterialRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() {
40             @Override
41             public void onRefresh(MaterialRefreshLayout materialRefreshLayout) {
42                 mMaterialRefreshLayout.finishRefreshLoadMore();
43                 //todo 一般加载数据都是在子线程中,这里我用到了handler
44                 new Handler().postDelayed(new Runnable() {
45                     @Override
46                     public void run() {
47                         for (int i = 0; i <= 3; i++) {
48                             list.add(i,"下拉刷新 " + i);
49                         }
50                         mArrayList.notifyDataSetChanged();//todo 通知刷新
51 
52                         //下拉刷新停止
53                         mMaterialRefreshLayout.finishRefresh();
54                     }
55                 },3000);
56             }
57 
58             //todo 真正用的时候,就会去定义方法,获取数据,一般都是分页,在数据端获取的时候,把页数去增加一,然后在去服务端去获取数据
59             @Override
60             public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) {
61                 super.onRefreshLoadMore(materialRefreshLayout);
62                 mMaterialRefreshLayout.finishRefresh();
63                 new Handler().postDelayed(new Runnable() {
64                     @Override
65                     public void run() {
66                         isLoadMore = false;//todo 上拉的时候把下拉取消
67                         for (int i = 0; i <= 3; i++) {
68                             list.add("上拉加载" + i);
69                         }
70                         //todo 通知刷新
71                         mArrayList.notifyDataSetChanged();
72 
73                         /**
74                          * 完成加载数据后,调用此方法,要不然刷新的效果不会消失
75                          */
76                         mMaterialRefreshLayout.finishRefreshLoadMore();
77                     }
78                 }, 3000);
79             }
80         });
81     }
82 
83 
84     public void goBack(View view) {
85         finish();
86     }

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/3090.html

相关文章

  • 复杂type页面封装库,支持多种状态切换和下拉刷新拉加

    摘要:支持复杂页面,例如添加自定义头部和底部布局,支持横向滑动,还可以支持粘贴头部类似微信好友分组,支持不规则瀑布流效果,支持侧滑删除功能。十分方便实现复杂的布局页面,结构上层次分明,便于维护。 目录介绍 1.复杂页面库介绍 2.本库优势亮点 2.1 支持多种状态切换管理 2.2 支持添加多个header和footer 2.3 支持侧滑功能和拖拽移动 2.4 其他亮点介绍 3.如...

    Karrdy 评论0 收藏0
  • RecycleView相关

    摘要:接下来通过一系列的文章讲解如何使用处理常见的的一些问题自定义实现下拉刷新,加载更多自定义实现下拉刷新,加载更多增强版之继承自,堪称增强版。自我感觉本系列算是中文关于资料中的干货。因网上有大量半吊子写的相关的中文文章。 Android ItemTouchHelper 实践 实现 RecyclerView 拖动排序和滑动删除,我想到的是 ViewDragHelper ,或者是第三方库,当我...

    weij 评论0 收藏0
  • Android第三方库 - 收藏集 - 掘金

    摘要:项目地址特性来啦,快来玩一玩掘金可以说是的升级版,前段时间开发的目前已经有个,的设计初衷是一个能让文本执行漂亮的漂浮动画。免调试工具掘金是一款方便调试的工具,可以兼容所有版本,不需要权限。 收藏安卓开发中非常实用优秀的库! 有图有真相! - Android - 掘金本来是打算收藏工具类的,但转念一想,已经有这么多优秀的库了,就没必要再去重复造轮子了,便归纳工作中比较实用的库吧,不用在花...

    sihai 评论0 收藏0
  • RecyclerView封装库和综合案例【包含25篇博客】

    摘要:支持复杂页面,例如添加自定义头部和底部布局,支持横向滑动,还可以支持粘贴头部类似微信好友分组,支持不规则瀑布流效果,支持侧滑删除功能。支持粘贴头部的需求效果,这种效果类似微信好友分组的那种功能界面。 目录介绍 1.复杂页面库介绍 2.本库优势亮点 2.1 支持多种状态切换管理 2.2 支持添加多个header和footer 2.3 支持侧滑功能和拖拽移动 2.4 其他亮点介绍 ...

    silenceboy 评论0 收藏0
  • H5下拉刷新拉加实现原理浅析

    摘要:原文链接前言在移动端网页中,下拉刷新和上拉加载更多数据的交互方式出现频率很高,开源社区也有很多类似的解决方案,如,库等。 原文链接:justrockit.top 前言 在移动端H5网页中,下拉刷新和上拉加载更多数据的交互方式出现频率很高,开源社区也有很多类似的解决方案,如iscroll,pulltorefresh.js库等。下面是对这两种常见交互基本实现原理的阐述。 实现原理 下拉刷新...

    X1nFLY 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<