• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > listview下拉刷新和上拉加载更多的多种实现方案,listview下拉

listview下拉刷新和上拉加载更多的多种实现方案,listview下拉

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了listview下拉刷新,安卓listview下拉刷新,listview下拉刷新框架,listview下拉刷新demo,listview上下拉刷新等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

listview下拉刷新和上拉加载更多的多种实现方案,listview下拉


     listview经常结合下来刷新和上拉加载更多使用,本文总结了三种常用到的方案分别作出说明。

     方案一:添加头布局和脚布局
        android系统为listview提供了addfootview和addheadview两个API。这样可以直接自定义一个View,以添加视图的形式实现下来刷新和上拉加载。
     实现步骤
       1、创建一个类继承ListView:class PullToRefreshListView extends ListView;
       2、在构造方法中添加HeadView:addHeaderView(headView);
       3、获取HeadView的高。测量控件的高可以有两方法getMeasuredHeight和getHeight,getMeasuredHeight()在onMeasure方法执行之后才能获取到;getHeight()  在onLayout方法执行之后才能获取到值;
       4、显示和隐藏headView,通过setpadding实现,当向下滑,且第一条可见item是第0条的时候才需要设置HeadView的paddingTop来显示HeadView。
              显示:headView.setPadding(0,0,0,0);
              隐藏:headView.setPadding(0,-headViewHeight,0,0);
       5、下拉刷新三种状态的判断,移动的时候,当paddingTop < 0 的时候,说明HeadView没有完全显示出来,进入下拉刷新状态;移动的时候,当paddingTop >= 0 的时候,   说明HeadView已经完全显示出来了,进入松开以新状态;手指抬起的时候,且当前状态是松开刷新状态的时候,进入正在刷新状态; 当已经是“正在刷新”状态时,   则不允许再做”下拉刷新”和”松开刷新”的操作了,在Move事件中加入判断,如果已经是正在刷新状态了,则不处理下拉的操作了。
       6、下拉箭头的转动。下拉刷新是向下,松开刷新时向上。旋转动画通过属性动画实现。隐藏箭头的时候要清除动画:iv_arrow.clearAnimation();  如果不隐藏动画效果,设置View.GONE之后还是看得见的。
       7、HeadView显示时,当手指松开时的处理,松开时如果是“正在刷新”状态,则把headVie完全显示;松开时如果是“下拉刷新”状态,则把HeadView完全隐藏。
       8、增加FooterView:addFooterView(footerView)。当ListView处于空闲状态,并且最后一条可见item是ListView中的最后一条数据时显示footview,   footerView显示出来后,ListView不会自动上滑把FooterView显示出来的,所以需要手动设置:setSelection(getCount() - 1);即选中最后一条。
       9、增加回调监听器。当ListView处于刷新状态的时候会调用onRefreshing()方法;当ListView处于加载更多的时候会调用onLoadMore()。加载完成后通知控件加载完成。

       具体实现:

import com.itheima.pulltorefreshlistview.R;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.RotateAnimation;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;

public class PullToRefreshListView extends ListView {

    private View headerView;
    private float downY;
    private int headerViewHeight;
    /** 状态:下拉刷新 */
    private static final int STATE_PULL_TO_REFRESH = 0;
    /** 状态:松开刷新 */
    private static final int STATE_RELEASE_REFRESH = 1;
    /** 状态:正在刷新 */
    private static final int STATE_REFRESHING = 2;
    /** 当前状态 */
    private int currentState = STATE_PULL_TO_REFRESH;    // 默认是下拉刷新状态
    private ImageView iv_arrow;
    private ProgressBar progress_bar;
    private TextView tv_state;
    private RotateAnimation upAnim;
    private RotateAnimation downAnim;
    private OnRefreshingListener mOnRefreshingListener;
    private View footerView;
    private int footerViewHeight;
    /** 正在加载更多 */
    private boolean loadingMore;

    public PullToRefreshListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initHeaderView();
        initFooterView();
    }
    
    private void initHeaderView() {
        headerView = View.inflate(getContext(), R.layout.header_view, null);
        iv_arrow = (ImageView) headerView.findViewById(R.id.iv_arrow);
        progress_bar = (ProgressBar) headerView.findViewById(R.id.progress_bar);
        showRefreshingProgressBar(false);
        tv_state = (TextView) headerView.findViewById(R.id.tv_state);
        headerView.measure(0, 0);    // 主动触发测量,mesure内部会调用onMeasure
        headerViewHeight = headerView.getMeasuredHeight();
        hideHeaderView();
        super.addHeaderView(headerView);
        upAnim = createRotateAnim(0f, -180f);
        downAnim = createRotateAnim(-180f, -360f);
    }
    
    private void initFooterView() {
        footerView = View.inflate(getContext(), R.layout.footer_view, null);
        footerView.measure(0, 0);// 主动触发测量,mesure内部会调用onMeasure
        footerViewHeight = footerView.getMeasuredHeight();
        hideFooterView();
        super.addFooterView(footerView);
        
        super.setOnScrollListener(new OnScrollListener() {
            
            // 当ListView滚动的状态发生改变的时候会调用这个方法
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                if (scrollState == OnScrollListener.SCROLL_STATE_IDLE    // ListView处于空闲状态
                        && getLastVisiblePosition() == getCount() - 1    // 界面上可见的最后一条item是ListView中最后的一条item
                        && loadingMore == false                            // 如果当前没有去做正在加载更多的事情
                        ) {
                    loadingMore = true;
                    showFooterView();
                    setSelection(getCount() - 1);
                    
                    if (mOnRefreshingListener != null) {
                        mOnRefreshingListener.onLoadMore();
                    }
                }
            }
          



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • listview下拉刷新和上拉加载更多的多种实现方案,listview下拉

相关文章

  • 2017-05-26关于linux的busybox工具mdev的使用和声卡热插拔以及驱动挂载的总结
  • 2017-05-26android 实现漫天飞舞雪花以及下雨天的效果
  • 2017-05-26Fragment,androidfragment
  • 2017-05-26androd 获得wifi列表,androdwifi列表
  • 2017-05-26手把手教你打造一个心电图效果View Android自定义View
  • 2017-05-26android OrmLite,androidormlite
  • 2017-05-26Android一个ListView列表之中插入两种不同的数据,androidlistview
  • 2017-05-26自定义组件,android自定义组件
  • 2017-05-26Android studio 插件之 GsonFormat (自动生成javabean)
  • 2017-05-26安卓蓝牙技术Bluetooth使用流程(Bluetooth详解),安卓bluetooth

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android中AIDL详解
    • Android 手机卫士--自定义属性,android卫士
    • Android中接收系统广播消息
    • Android使用静默安装时碰见的问题,android静默
    • 自动完成文本框(AutoCompleteTextView与MultiAutoCompleteTextView)关联适配器,文本框autocomplete
    • 手游助手应用源码项目,游助手源码项目
    • lua中使用luasocket通信,写了一个简单的事件库
    • 【android开发笔记】为Button的背景图片添加边框式样式效果,
    • Android View体系(九)自定义View
    • Android Log,androidlog

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有