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. 概述 为实现下拉刷新功能,大 ...
随机推荐
- 谈 jquery中.band() .live() .delegate() .on()的区别
bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数 $("a").bind("click",function(){alert(& ...
- 杭电OJ2005——第几天
/*第几天?Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 利用自动类型转换存储string类型
类型转换是我们最常用的功能.就像上战场用的枪一样,敌人用的冲锋枪, 自己手里就一把步枪,打起仗来始终有点不爽. 因此,基本功能的完善很重要. 通常情况下我们需要String类型转其它的基础类型.这时我 ...
- git全部使用步骤
今天要讲的内容:项目管理和工具 Git:版本控制系统 Less:动态的css语言,提高编写CSS的效率 Gulp:项目自动构建工具,对html,css,js,image进行压缩,合并等操作. 一.什么 ...
- angular 2 animate 笔记
好久没有在这里写点笔记了.时隔已久,angular1 去 angular2 咯 笔记来源:https://angular.cn/docs/ts/latest/guide/animations.html ...
- 每天一个linux命令30)--chgrp命令
在Linux系统里,文件或目录的权限的掌控以拥有者及所属群组来管理.可以使用chgrp 指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以. chgrp 命令就是change gr ...
- 每天一个linux命令(26)--用SecureCRT来上传和下载文件
用SSH管理Linux 服务器时经常需要远程与本地之间交互文件,而直接使用 SecureCRT 自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmod ...
- PCB行业版特色功能展示
普实PCB行业版,专为PCB行业需求而定制.秉承一体化.集团化.移动化为设计理念,采用互联网技术.云计算技术.移动应用技术开发的新一代系统帮助PCB企业创新管理模式.引领商业变革!系统从接到订单开始, ...
- [LeetCode] Dp
Best Time to Buy and Sell Stock 题目: Say you have an array for which the ith element is the price of ...
- move.js 源码 学习笔记
源码笔记: /* move.js * @author:flfwzgl https://github.com/flfwzgl * @copyright: MIT license * Sorrow.X - ...