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. 概述 为实现下拉刷新功能,大 ...
随机推荐
- js设计模式--迭代器模式
迭代器模式: 迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该方法中的内部表示.js中我们经常会封装一个each函数用来实现迭代器. 理解的意思:提供一个方法,去把对象的每一项按 ...
- MongoDB的安装及恢复
在http://www.mongodb.org/display/DOCS/Downloads 下载对应版本 mongodb 安装数据库 解压文档,复制到c盘,改名为mongodb 新建文件夹c:/da ...
- YUM 安装及清理
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理 ...
- 对spring,struts,hibernate及MVC的理解
对于spring,hibernate,struts等框架,刚开始的时候总是会很迷茫,不知道他们是用来做什么的. 1.对框架的作用理解 个人认为框架的作用是把代码进行了分类,减少了代码的耦合性. 如果不 ...
- C#同步,异步的理解,包括5.0中await和async(学习笔记)
之前在工作中一直用的是同步线程,就是先进入画面的load事件,然后在里面进行数据库调用的处理.后面又遇到了公司软件中一些比较古老的代码,一开始在那块古老代码中增加机能的时候,我想用到数据库的数据给画面 ...
- hashMap4种遍历方式
package collection; import java.util.Collection; import java.util.HashMap; import java.util.Hashtabl ...
- TimerTask实现定期检查数据库操作
最近在做一个P2P 的众筹网站,其他的内容还都可以,只是定期检查数库里面的项目是不是到期了,让我费了一些时间,现在写好了,我把它总结下来,以便以后使用.顺便和大家分享一下. Timer可以看成一个定时 ...
- CSS实现覆盖弹窗(效果如JQuery-UI的Dialog)
原理:定义一个新的div用来覆盖整个页面,再把想要弹出的窗口放在这个div上面 1.定义一个div,设置其隐藏(display:none),用于覆盖整个页面,并设置其CSS属性为: #divBg { ...
- Jquery 客户端生成验证码
验证码的作用: 1.有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,腾讯的QQ社区),我们利用比较简 ...
- 1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区(题解第二弹)
1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: ...