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. 概述 为实现下拉刷新功能,大 ...
随机推荐
- vue生命周期的介绍
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Javascript匿名函数
单独的匿名函数无法运行,就算能运行,也无法调用.解决办法如下: 法1. //把匿名函数赋值给变量 var box=function(){ return "Lee"; }; aler ...
- 软件测试作业1 — 令我印象最深的BUG
回顾从大一到大三的学习生活,我在学习过程中遇到过许多BUG,刚开始和罗凯老师学习C++时从来没有接触过编程,那时候导致程序不能运行的原因多是语法错误和拼写错误,到了大一下学期,错误多出现在循环与条件跳 ...
- 每天一个linux命令(56)--crontab命令
上一节学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,Linux 系统则是由 cron(crond)这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...
- 【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则
作者:Williammao, 腾讯移动客户端开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/290.h ...
- 监听器如何获取Spring配置文件(加载生成Spring容器)
Spring容器是生成Bean的工厂,我们在做项目的时候,会用到监听器去获取spring的配置文件,然后从中拿出我们需要的bean出来,比如做网站首页,假设商品的后台业务逻辑都做好了,我们需要创建一个 ...
- 跨专业学习编程的苦逼生活 QWQ嘤嘤嘤
一串串小小的代码,竟然可以做出辣么多的东西,彻底颠覆了我的世界观.人生观.价值观. 话不多说,一个例子证明一切>>>> <!DOCTYPE html> <ht ...
- 你真的会 snapshot 吗? - 每天5分钟玩转 OpenStack(163)
这是 OpenStack 实施经验分享系列的第 13 篇. instance snapshot 操作可用于备份或者将 instance 保存为新的 image.如果在生产系统中执行 snapshot ...
- Yii2 Pjax 与 ActionForm ,不刷新提交数据
<?php yii\widgets\Pjax::begin(['id'=>'phoneDetail']);?> <?php $form = ActiveForm::begin( ...
- kali linux 忘记root密码重置办法
有段时间没用kali linux 的,加上最近装的系统有比较多,系统root的密码忘掉了,真是麻烦啊.之前在网上看到的一些方法尝试后没进的去,可能是因为不同的linux 不一样吧. 如果因为忘记密码而 ...