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. 概述 为实现下拉刷新功能,大 ...
随机推荐
- 新注册第一帖----------------------乱码新手自学.net 之Linq 入门篇
作为一个业余开发,断断续续学.net/c#也有不少日子了, 学习过程中,不断忘了学,学了忘,这让我很苦恼. 以前学习过程中,我总是在笔记本中记录下来知识要点,这么久下来,笔记本都写了四五本了. 然而, ...
- 实例了解js面向对象的封装和继承等特点
1.面向对象特点 相比之前按照过程式写法,面向对象有以下几个特点; 1.抽象:抓住核心问题,就是将很多个方法放在一个对象上.对象由属性和方法组成,属性就是我们定义的变量,它是静态的:方法就是行为操作, ...
- JS实例——间歇循环滚动
间歇滚动:滚动一行后,延迟2秒后继续滚动 具体实现代码如下: <!doctype html> <html lang="en"> <head> & ...
- UI培训就业会很难吗
众所周知UI是研究人机交互的学科,他是从互联网发展而来的,单从目前它的应用领域来看,主要应用于软件.互联网.移动智能设备.游戏和虚拟现实影音方面.这些都是新兴的热门方向和活跃领域.目前人才缺口和社会需 ...
- Python3.5 numpy,scipy,安装
不是特别难,先保证环境变量正确配置 首先,安装了VS2015; 第二,在Python3.5安装路径中有一个Scripts文件夹,里面有pip.exe或者类似的可执行文件,安装一下: 第三,下载相对应的 ...
- Debian安装Oracle Java步骤
在Debian下安装OpenJDK使用apt命令非常方便的安装,但安装Oracle就需要手动了,这里需了解ln和update-alternatvies命令. ln链接 首先我们来说说linux的链接, ...
- 模仿Wireshark网络抓包工具实现---c++
最近在用Wireshark抓包工具的时候,老感觉这东西用起来很简单,功能强大,所以想了解他的实现原理,我就自己好奇写了一个实现基本功能的demo吧. 其实叫抓包工具,其实就是抓取流经自己网卡的所有ip ...
- Kubernetes 1.5安装
Kubernetes从1.3开始引入kubeadm来试图简化其复杂的安装.但kubeadm至今仍不稳定,而且我个人觉得kubeadm反而麻烦,还不如直接用脚本或者其他自动化工具来安装来的利索.关于ku ...
- 1593: [Usaco2008 Feb]Hotel 旅馆
1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 391 Solved: 228[Submit ...
- DAX/PowerBI系列 - 参数表(Parameter Table)
DAX/PowerBI系列 - 参数表(Parameter Table) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★☆(4星) 概况: 这个模式比较简单灵活,而且很实用.所用的DAX语句也比较简 ...