google官方的下拉刷新+自定义上拉加载更多
转载请标注转载:http://blog.csdn.net/oqihaogongyuan/article/details/50949118
google官方的下拉刷新+自定义上拉加载更多
现在很多app都是使用的自定义的下拉刷新上拉加载更多,然而google官方为我们提供了下拉刷新操作,我在之前的博客中有撰文针对
自定义下拉刷新操作并提供源码下载 传送门 自定义下拉刷新及上拉加载更多
google官方的下拉刷新 传送门 google官方的下拉刷新组件的详细介绍及示例下载
google官方为我们提供了下拉刷新,我们自己增加自定义的上拉加载更多,这样相互结合使用,就出现了一款新的下拉刷新和上拉加载更多的组件,非常推荐在app中增加这中效果。先来看看效果如何,如下gif图,是不是给人耳目一新的感觉呢,最下面提供示例代码供下载学习。
1、自定义listView,因为google为我们提供能下拉刷新的组件
- android.support.v4.widget.SwipeRefreshLayout
因此我们只需要为自定的listView添加上拉“ 加载更多 ”的功能。
自定义上拉加载更多的listView代码如下:
- package com.example.myfirst.pulltorefreshlist;
- import android.content.Context;
- import android.util.AttributeSet;
- import android.view.View;
- import android.widget.AbsListView;
- import android.widget.ListView;
- /**
- * 上拉加载更多的listView,配合Google官方的下拉刷新使用
- * Created by chengguo on 2016/3/21.
- */
- public class LoadMoreListView extends ListView implements AbsListView.OnScrollListener {
- private static final String TAG = "RefreshListView";
- /**
- * 底部加载更多部分
- */
- private boolean isScrollToBottom;//判断是不是滑到了底部
- private View footerView; //底部的footer view
- private int footerViewHeight; //底部view的高度
- private boolean isLoadingMore = false; //判断是不是"加载更多"
- /**
- * listview的接口,监听listview的下来刷新和上拉加载更多
- */
- private OnRefreshListener mOnRefreshListener;
- public LoadMoreListView(Context context) {
- super(context);
- }
- public LoadMoreListView(Context context, AttributeSet attrs) {
- super(context, attrs);
- initFooterView();
- this.setOnScrollListener(this);
- }
- /**
- * 初始化底部view
- */
- private void initFooterView() {
- footerView = View.inflate(getContext(), R.layout.footer_layout, null);
- //设置(0,0)以便系统测量footerView的宽高
- footerView.measure(0, 0);
- footerViewHeight = footerView.getMeasuredHeight();
- footerView.setPadding(0, -footerViewHeight, 0, 0);
- this.addFooterView(footerView);
- }
- /**
- * 监听listview滚动的状态变化,如果滑到了底部,就“加载更多..."
- */
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- if (scrollState == SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_FLING) {
- if (isScrollToBottom && !isLoadingMore) {
- isLoadingMore = true;
- footerView.setPadding(0, 0, 0, 0);
- this.setSelection(this.getCount());
- if (mOnRefreshListener != null) {
- mOnRefreshListener.onLoadingMore();
- }
- }
- }
- }
- /**
- * 监听listview滚动的状态变化,判断当前是不是滑到了底部
- *
- * @param view
- * @param firstVisibleItem
- * @param visibleItemCount
- * @param totalItemCount
- */
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- if (getLastVisiblePosition() == (totalItemCount - 1)) {
- isScrollToBottom = true;
- } else {
- isScrollToBottom = false;
- }
- }
- /**
- * 设置监听接口,当为
- *
- * @param listener
- */
- public void setOnRefreshListener(OnRefreshListener listener) {
- mOnRefreshListener = listener;
- }
- /**
- * 为外界提供的方法,当Activity中的加载更多数据加载完后,就调用这个方法来隐藏底部的footerView
- */
- public void loadMoreComplete() {
- footerView.setPadding(0, -footerViewHeight, 0, 0);
- isLoadingMore = false;
- }
- /**
- * 设置接口,供外界实现,监听listview的刷新和加载更多的状态
- */
- public interface OnRefreshListener {
- /**
- * 上拉加载更多
- */
- void onLoadingMore();
- }
- }
2、activity的layout.xml文件如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <android.support.v4.widget.SwipeRefreshLayout
- android:id="@+id/swipe_google_and_loadmore_refresh_layout"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <com.example.myfirst.pulltorefreshlist.LoadMoreListView
- android:id="@+id/google_and_loadmore_refresh_listview"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- </com.example.myfirst.pulltorefreshlist.LoadMoreListView>
- </android.support.v4.widget.SwipeRefreshLayout>
- </LinearLayout>
3、主activity的代码如下,也有非常详细的代码注释,非常简单,这样一款google下拉刷新+自定义上拉加载更多就诞生了。
- package com.example.myfirst.pulltorefreshlist;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.support.v4.widget.SwipeRefreshLayout;
- import java.util.ArrayList;
- /**
- * google下拉刷新和自定义上拉加载更多的activity
- * Created by chengguo on 2016/3/21.
- */
- public class GoogleAndLoadMoreActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener, LoadMoreListView.OnRefreshListener {
- private SwipeRefreshLayout swipeRefreshLayout;
- private LoadMoreListView loadMoreListView;
- //对象数据集合
- private ArrayList<ListViewItem> items;
- //listview的数据加载器adapter
- private RefreshListAdapter adapter;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.google_and_loadmor_refreshing_aty);
- initView();
- initEvent();
- initData();
- }
- /**
- * 初始化列表数据
- */
- private void initData() {
- items = new ArrayList<ListViewItem>();
- //这里只是模拟10个列表项数据,在现实开发中,listview中的数据都是从服务器获取的。
- for (int i = 0; i < 10; i++) {
- ListViewItem item = new ListViewItem();
- item.setUserImg(R.mipmap.ic_launcher);
- item.setUserName("seven" + i);
- item.setUserComment("这是google官方一个下拉刷新ListView+自定义ListView上拉加载跟多");
- items.add(item);
- }
- //为listview配置adapter
- adapter = new RefreshListAdapter(GoogleAndLoadMoreActivity.this, items);
- loadMoreListView.setAdapter(adapter);
- }
- /**
- * 给控件添加事件
- */
- private void initEvent() {
- swipeRefreshLayout.setOnRefreshListener(this);
- //设置圆圈进度条的背景颜色
- // swipeRefreshLayout.setProgressBackgroundColorSchemeColor(
- // getResources().getColor(R.color.colorPrimary));
- //设置进度条变化的颜色
- swipeRefreshLayout.setColorSchemeResources(
- R.color.firstColor,
- R.color.secondColor,
- R.color.thirdColor,
- R.color.forthColor);
- }
- /**
- * 初始化界面控件
- */
- private void initView() {
- swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_google_and_loadmore_refresh_layout);
- loadMoreListView = (LoadMoreListView) findViewById(R.id.google_and_loadmore_refresh_listview);
- loadMoreListView.setOnRefreshListener(this);
- }
- /**
- * 触发了下拉刷新事件,就会执行onRefresh()方法,这样就能在这个
- * 方法中去执行网络获取最新的数据,然后再刷新到listview上面
- */
- @Override
- public void onRefresh() {
- //因为本例中没有从网络获取数据,因此这里使用Handler演示4秒延迟来从服务器获取数据的延迟现象,以便于大家
- // 能够看到listView正在刷新的状态。大家在现实使用时只需要使用run(){}方法中的代码就行了。
- Handler handler = new Handler();
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- //获取最新的list数据
- setRefreshData();
- //通知界面显示,
- adapter.notifyDataSetChanged();
- // 通知listview刷新数据完毕,让listview停止刷新
- swipeRefreshLayout.setRefreshing(false);
- }
- }, 6000);
- }
- /**
- * 模拟加载刷新数据
- */
- private void setRefreshData() {
- //这里只是模拟3个列表项数据,在现实开发中,listview中的数据都是从服务器获取的。
- for (int i = 0; i < 3; i++) {
- ListViewItem item = new ListViewItem();
- item.setUserImg(R.mipmap.ic_launcher);
- item.setUserName("seven" + i);
- item.setUserComment("这是一个下拉刷新,上拉加载更多的ListView");
- items.add(item);
- }
- }
- /**
- * ”加载更多“ 的回调接口方法
- */
- @Override
- public void onLoadingMore() {
- //因为本例中没有从网络获取数据,因此这里使用Handler演示4秒延迟来从服务器获取数据的延迟现象,以便于大家
- // 能够看到listView正在刷新的状态。大家在现实使用时只需要使用run(){}方法中的代码就行了。
- Handler handler = new Handler();
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- //获取最新的list数据
- setRefreshData();
- //通知界面显示,
- adapter.notifyDataSetChanged();
- // 通知listview刷新数据完毕,让listview停止刷新,取消加载跟多
- loadMoreListView.loadMoreComplete();
- }
- }, 6000);
- }
- }
google官方的下拉刷新+自定义上拉加载更多的更多相关文章
- Android如何定制一个下拉刷新,上滑加载更多的容器
前言 下拉刷新和上滑加载更多,是一种比较常用的列表数据交互方式. android提供了原生的下拉刷新容器 SwipeRefreshLayout,可惜样式不能定制. 于是打算自己实现一个专用的.但是下拉 ...
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
android ListView的上部下拉刷新下部点击加载更多具体实现及拓展 ListView下拉刷新,上拉自动加载更多 下拉刷新以及加载更多
- Android之下拉刷新,上啦加载的实现(一)
转载地址http://blog.csdn.net/leehong2005/article/details/12567757#t5 前段时间项目中用到了下拉刷新功能,之前在网上也找到过类似的demo,但 ...
- 【Android - 自定义View】之自定义可下拉刷新或上拉加载的ListView
首先来介绍一下这个自定义View: (1)这个自定义View的名称叫做 RefreshableListView ,继承自ListView类: (2)在这个自定义View中,用户可以设置是否支持下拉刷新 ...
- iOS MJRefresh下拉刷新(上拉加载)使用详解
下拉刷新控件目前比较火的有好几种,本人用过MJRefresh 和 SVPullToRefresh,相对而言,前者比后者可定制化.拓展新都更高一点. 因此本文着重讲一下MJRefresh的简单用法. 导 ...
- SVPullToRefresh 下拉刷新,上拉加载
https://github.com/Sephiroth87/ODRefreshControl 类似刷新控件,类似qq动画的那种刷新. 一.下载第三方库 https://github.com/samv ...
- iOS开发 XML解析和下拉刷新,上拉加载更多
iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...
- iscroll 下拉刷新,上拉加载
新手,直接贴代码了 <!DOCTYPE html><html class=""><head lang="en"><me ...
- DCloud-MUI:下拉刷新、上拉加载
ylbtech-DCloud-MUI:下拉刷新.上拉加载 1. 下拉刷新返回顶部 0. http://dev.dcloud.net.cn/mui/pulldown/ 1. 概述 为实现下拉刷新功能,大 ...
随机推荐
- 用qemu搭建aarch64学习环境
作者信息 作者: 彭东林 邮箱: pengdonglin137@163.com QQ: 405728433 软件平台 主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linu ...
- mybatis的动态sql中collection与assoction
User.java, Role.java,address.java为三个类 public class User { .....//user自己的属性//association一对一 private R ...
- Linux 7.2 + LAMP + Nagios-4.2.4 + 简单部署监控项
Nagios详细文档 监控端 一.安装依赖包并设置Apache服务. yum -y install httpd php gcc gd perl unzip openssl-devel vi /etc/ ...
- 剑指offer编程题Java实现——面试题6重建二叉树
题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2, ...
- python爬虫利器Selenium使用详解
简介: 用pyhon爬取动态页面时普通的urllib2无法实现,例如下面的京东首页,随着滚动条的下拉会加载新的内容,而urllib2就无法抓取这些内容,此时就需要今天的主角selenium. Sele ...
- 使用EntityFramework中DbSet.Set(Type entityType)方法碰到的问题
使用的是EntityFramework, Version=6.0.0.0,项目原本直接使用将EntityFramework的Entity拿到UI使用,后面想使用dto对象将数据库的Entity与前台分 ...
- 关于echarts的一些基本使用demo
最近发现一个很好用的一个前端控件echarts,效果非常不错,兼容ie8+以上等主流浏览器.可以使用它制作报表,地图示意图等,可用其实现一系列强大的功能. 其基于html5 Canvas,是一个纯Ja ...
- HTML中鼠标移动过去变换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- c风格字符串,字符串字面值,c++字符串
C风格字符串:本质上就是以空字符null为结束符的数组 可以简单的理解为:有'\0'的是c风格字符串,无'\0'的是普通字符数组 字符串字面值:是一串常量字符,字符串字面值常量用双引号括起来的零个或多 ...
- wemall app商城源码android开发MD5加密工具类
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供 ...