Android ExpandableListView实现下拉刷新和加载更多效果

支持下拉刷新和加载更多的ExpandableListView,供大家参考,具体内容如下

模拟器有点卡,滑动的时候鼠标不方便

怎么用:

XML中声明

<com.xingyi.elonggradletaskdemo.widget.SExpandableListView
    android:listSelector="@android:color/transparent"
    android:id="@+id/elv_coupon"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:dividerHeight="1dp">

  </com.xingyi.elonggradletaskdemo.widget.SExpandableListView>

UI中配置下拉刷新的回调以及是否支持下拉和加载更多

expandableListView = (SExpandableListView)
    findViewById(R.id.elv_coupon);
    // 在设置适配器之前设置是否支持下拉刷新
    expandableListView.setLoadingMoreEnabled(true);
    expandableListView.setPullRefreshEnabled(true);
    expandableListView.setAdapter(couponAdapter);

设置下拉刷新和加载跟多的回调接口

expandableListView.setmLoadingListener(new SExpandableListView.LoadingListener() {
      @Override
      public void onLoadMore() {
        // 模拟加载更多
        isPull = false;
        // 这里应该在项目中请求,这里用延时模拟接口请求
        loadCount++;
        Message msg = handler.obtainMessage();
        msg.arg1 = loadCount;
        handler.sendMessageDelayed(msg, 2000);
        Log.e("TAG---HANDLER:", loadCount + "-->");
      }

      @Override
      public void onRefresh() {
        isPull = true;
        loadCount++;
        // 模拟接口请求下拉刷新
        Message msg = handler.obtainMessage();
        msg.arg1 = loadCount;
        handler.sendMessageDelayed(msg, 2000);
        Log.e("TAG---HANDLER:", loadCount + "-->");
      }
    });

   private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
      // 模拟接口回复数据,加入下拉刷新次数为6次的话我们就认为没有更多了
      if (loadCount > 6) {
        expandableListView.refreshComplete();
        expandableListView.setNoMore(true);
      } else {
        addLoadMoreData();
        if (isPull) {
          expandableListView.refreshComplete();
        }
        couponAdapter.notifyDataSetChanged();
        // 是不是全部展开,根据需求设置
//        expanedAll();
      }
      Log.e("TAG---收到消息:", loadCount + "-->");

    }
  };

简单看下实现过程

  • 自定义ExpandableListview
  • 重写onTouch事件
  • 给自定义的view添加滑动监听事件
  • 初始化的时候给View添加header 和 footer 用来下拉刷新
// 这里在自定view构造函数中调用的增加header和footer的代码,注意下两种添加方式的区别,详情见注释和源代码
 private void initSE(Context context) {
    /**
     * 这里是footer的填充,注意指定他的父亲为当前的listview,
     * 这里footer不用指定layoutparem是因为footer 在填充的时候已经指定了他的父view
     */
    loadMoreView = LayoutInflater.from(context).inflate(R.layout.item_footer_view, this, false);
    loadMorePb = (ProgressBar) loadMoreView.findViewById(R.id.pb_loading);
    loadMoreDesc = (TextView) loadMoreView.findViewById(R.id.tv_loadmore_desc);
  }

  @Override
  public void setAdapter(ExpandableListAdapter adapter) {
    if (pullRefreshEnabled) {
      mRefreshHeader = new ArrowRefreshHeader(getContext());
      mRefreshHeader.setProgressStyle(ProgressStyle.LineScale);
      /**
       * 注意一定要指定header的layoutparasm为 AbsListView,以为 header是 new出来的他默认的 layoutparm是当前header的类型,
       * 如果我们不修改的话会报错 类型转化异常,
       */
      mRefreshHeader.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT));
      addHeaderView(mRefreshHeader);
    }
    if (loadingMoreEnabled) {
      addFooterView(loadMoreView);
    }
    super.setAdapter(adapter);
  }

源代码下载地址:ElongGradleTaskDemo

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

(0)

相关推荐

  • Android自定义控件ListView下拉刷新的代码

    ListView在实际实用中,一般都会有下新刷新和上拉加载的动态效果,今天要学的就是如何自定义带下拉刷新的ListView. 原理解析:一般将有下拉刷新的listview分成四种不同的状态来进行不同的显示效果. 1.完成状态done:listview正常显示状态 2.下拉状态pull:listview正在下拉时的状态 3.释放状态release:listview下拉后松开的状态 4.更新状态refreshing:listview下拉后加载数据时的状态 实现步骤: 自定义CustomListVie

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

    本文实例为大家分享了android实现ListView下拉刷新上拉加载的具体代码,供大家参考,具体内容如下 这次使用的是系统的SwipeRefreshLayout实现下拉刷新,和设置ListView的滑动监听判断是否滑动到最底部然后加载更多: 这个要比PullToRefreshListView简单很多,想PullToRefreshListView实现下拉刷新上拉加载的可以看这篇博客: android使用PullToRefresh框架实现ListView下拉刷新上拉加载更多 至于使用哪一种大家可以

  • Android XListView下拉刷新和上拉加载更多

    市面上有好多的类比ListView刷新数据的开源框架,如:v4包自带的SwipeRefreshLayout ,以及集ListView.GridView甚至WebView于一身的Pulltorefresh等等.前述的两个开源框架目前使用也算频繁.有兴趣的读者可以自行搜索,当然有时间一定回来对所有的使用方式做一个汇总和比较.今天介绍的这款框架,专门针对ListView做下拉刷新与上拉加载的,如果单单是ListView就显得更加简单方便易于理解. 1.首先引入xListView_lib库到自己的Dem

  • Android ListView实现下拉顶部图片变大效果

    本文实例为大家分享了Android ListView下拉顶部图片变大的具体代码,供大家参考,具体内容如下 在git上查看牛人的代码,发现是反编译别人的代码,还没加注释,代码也没有完全编译完整,所以这里我做的简单的注释,仅供学习. 变量说明 这里变量包含了:自定义返回动画加速度.自定义动画线程.头部图片view,最后的y坐标,做好的比例,做大的比例等. private static final String TAG = "PullToZoomListView"; private stat

  • Android ListView实现上拉加载下拉刷新和滑动删除功能

    最近项目需要用到可以滑动删除并且带有上拉加载下拉刷新的Listview,查阅了一些资料,大多都是在SwipeMenuListView的基础上去添加头部和底部View,来扩展上拉加载和下拉刷新的功能,不过需要手动的去绘制UI及处理一些动画效果.用起来也不是特别方便.刚好项目中用到PulltorefreshLibrary库,就尝试着扩展了一个PullToRefreshSwipeMenuListView类来实现需求.先看一下效果: 实现步骤 一.组合Pulltorefresh与SwipeMenuLis

  • Android自定义渐变式炫酷ListView下拉刷新动画

    本文实例为大家分享了自定义渐变式炫酷动画的ListView下拉刷新,供大家参考,具体内容如下 主要要点 listview刷新过程中主要有三个步骤当前:状态为下拉刷新,当前状态为下拉刷新,当前状态为放开刷新,当前状态为正在刷新:主要思路为三个步骤分别对应三个自定义的view:即ibuRefreshFirstStepView,ibuRefreshSecondStepView,ibuRefreshThirdStepView. 效果图 ibuRefreshFirstStepView代码,例如: priv

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

    本文实例为大家分享了Android实现ListView下拉刷新上拉加载更多的具体代码,供大家参考,具体内容如下 其实谷歌官方目前已经推出ListView下拉刷新框架SwipeRefreshLayout,想了解的朋友可以点击 android使用SwipeRefreshLayout实现ListView下拉刷新上拉加载了解一下: 大家不难发现当你使用SwipeRefreshLayout下拉的时候布局文件不会跟着手势往下滑,而且想要更改这个缺陷好像非常不容易. 虽然SwipeRefreshLayout非

  • android ListView结合xutils3仿微信实现下拉加载更多

    前言:最近涉及到和QQ打交道,定义所有的好友一共只能有300条消息,如果一次性从数据库读取300条或者更多,界面会有细微的卡顿.所以考虑了下分页,第一次进来只显示20条(仿微信),当用户滑到第一条后,如果数据库有消息,则再加载20条. 步骤-问把大象关冰箱,总共分几步? 1.自定义absListview.scrollListerner 核心的东西是监听ListView的scrollListerner,这里采取拿来主义 原文连接找不到了,如果原作者看到,请联系青楼爱小生,将您的文章链接更新出来 ,

  • Android自定义listview布局实现上拉加载下拉刷新功能

    listview实现上拉加载以及下拉刷新的方式有很多.下面是我写的一种自定义的布局,复用性也比较的强.首先就是继承的listview的自定义view.   AutoListView.Java: package com.example.mic.testdemo.view; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.os.Bu

  • Android中ListView下拉刷新的实现代码

    Android中ListView下拉刷新 实现效果图: ListView中的下拉刷新是非常常见的,也是经常使用的,看到有很多同学想要,那我就整理一下,供大家参考.那我就不解释,直接上代码了. 这里需要自己重写一下ListView,重写代码如下: package net.loonggg.listview; import java.util.Date; import android.content.Context; import android.util.AttributeSet; import a

随机推荐