google官方的下拉刷新+自定义上拉加载更多

linux vi如何保存编辑的文件 阅读详情

现在很多app都是使用的自定义的下拉刷新上拉加载更多,然而google官方为我们提供了下拉刷新操作,我在之前的博客中有撰文针对google官方为我们提供了下拉刷新,我们自己增加自定义的上拉加载更多,这样相互结合使用,就出现了一款新的下拉刷新和上拉加载更多的组件,非常推荐在app中增加这中效果。
自定义下拉刷新及上拉加载更多

google官方的下拉刷新+自定义上拉加载更多

(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官方自带下拉刷新示例 Google自带的官方下拉刷新示例,使用Android Studio编写 立即下载

相关推荐

Framework7滚动加载及图片滚动

Framework7 滚动加载 图片滚动 下拉加载

Android RecyclerView下拉刷新 & 上拉加载更多

GitHub传送门1.写在前面本文主要实现的是上拉加载更多功能,下拉刷新使用的是Google官方的SwipeRefreshLayout控件,因为在实现这个功能的时候走了不少弯路,所以在此记录下来分享给大家,先看下效果图:2.实现上拉加载实际上就是给RecyclerView增加一个FooterView,然后通过判断是否滑动到了最后一条Item,来控制FooterView的显示和隐藏,接下来我们来看下如

YangLe 3885

自定义listview下拉刷新上拉加载更多以及google官方的下拉刷新

自定义listview下拉刷新上拉加载更多以及google官方的下拉刷新

android 开源框架之——下拉刷新,上拉加载更多总结

最近项目中需要用到下拉刷新的功能,发现自己的写的不是很好,网上搜了一下,发现开源的框架好多啊,而且类似的框架也有很多,不过也很杂,各有优缺点。在这里,我就总结一下比较常用的,争取全面一些,以后自己用起来,查看起来也方便些。下拉刷新1.Android-PullToRefresh项目地址:https://github.com/chrisbanes/Android-PullToRefresh评语:比较早的

da_caoyuan的博客 1万+

安卓下拉上拉刷新相关-Google官方下拉刷新组件SwipeRefreshLayout(Google最新控件).rar

Google官方下拉刷新组件SwipeRefreshLayout(Google最新控件).rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

保姆级教程:在通达信V7.611上配置欧奈尔RPS曲线(附完整公式与每日更新流程)

本文提供通达信V7.611配置欧奈尔RPS曲线的保姆级教程,涵盖从环境准备、基础设置到核心公式配置的全流程。详细讲解如何创建股票池、编写EXTRS基础公式及RPS显示公式,并附每日更新流程与实战应用技巧,帮助投资者精准捕捉强势股。

weixin_30000735的博客 464

Vue自定义指令实现下拉刷新和上滑加载更多

本文介绍了如何使用 Vue 自定义指令实现下拉刷新和上滑加载更多功能,并提供了一个完整的示例代码。该方案不依赖任何第三方库,仅使用原生 JavaScript 实现,代码简洁易懂,易于维护。同时,还讨论了实现过程中可能遇到的问题及相应的解决方案,帮助开发者更好地理解和应用该技术。你可以根据实际需要调整阈值、加载更多触发距离等参数。实际应用中,和方法通常会调用 API 获取数据,并更新列表内容。为了更好的用户体验,可以在加载过程中显示 loading 指示器。

服务员的博客 1005

线性模型:AR、MA、ARMA、ARMAX、ARX、ARARMAX、OE、BJ等

线性模型:AR、MA、ARMA、ARMAX、ARX、ARARMAX、OE、BJ等

zephyr_wang的博客 1万+

vue 自定义指令上拉加载更多

ant-design-vue 的table组件添加上拉加载更多的效果

shadow_yi_0416的博客 886

FairyGUI编辑器自定义菜单扩展插件

本文涉及到的软件有:FairyGUI,VSCode代码环境涉及到了:LuaVSCode插件:EmmyLua在编写FairyGUI编辑器菜单前,了解一下FairyGUIEditor的API会有效的帮助我们解决很多问题。FairyGUI的扩展是通过编辑器自带的插件功能实现的,插件中我使用的是lua环境模板。导入编辑器的LuaAPI,文件可以在FairyGUI-Editor源码的插件目录中找到。接下来将通过功能来说明对应的API作用。

Aili_Xiao的博客 4500

ADS 2024 Circuit Envelope 仿真:3步配置调制源,分析5G NR EVM与ACPR

本文详细介绍了ADS 2024 Circuit Envelope仿真技术在5G NR调制源配置与关键指标分析中的应用。通过3步配置调制源,工程师可以高效评估EVM与ACPR等关键指标,特别适用于功放设计中的非线性效应诊断。文章还提供了优化仿真设置和精确提取EVM、ACPR的实用方法,助力5G射频前端设计。

weixin_28559803的博客 385

Android--Google官方下拉刷新SwipeRefreshLayout(附加增加上拉加载)

Demo_SwipeRefreshLayout 转载请注明地址: 下拉刷新是用系统的控件,但是这控件本身不带有上拉加载,上拉加载需要在ListView的Adapter中设置 需要V4包的支持 compile 'com.android.support:support-v4:23.4.0' 布局 <android.support.v4.widget

小麟的博客 5291

【离线OCR】微信离线实现图片OCR文本和表格识别

基于微信本地OCR引擎(由最新版微信自动安装)。通过Python对其官方调用逻辑进行完整翻译和封装,使开发者可以用简单的API调用其强大的OCR功能。

专注于医院数据分析技术与系统开发的创作与分享。 2625

【Linux命令解密—tee】轻松解决无权保存vim已修改文件的尴尬!

文章目录`tee`—轻松解决无权保存`vim`已修改文件的尴尬!一、背景二、解决方法三、命令详解 tee—轻松解决无权保存vim已修改文件的尴尬! 一、背景 在类Linux环境下工作的小伙伴们,肯定都有过这种尴尬:就是在修改一个高权限的文件(比如系统配置文件)的时候,最后提交的时候,发现无权修改此文件!然后只能灰溜溜的保存一份,再次用管理员权限打开,再复制一遍!!!是不是感觉非常不爽。。。 但是今...

问题不大 2789

【CanMV K210】AI 视觉 MNIST 手写数字识别与分类推理

本文介绍了基于CanMV K210开发板的MNIST手写数字识别实验。实验通过摄像头采集图像,经过开窗、灰度化、缩放、反色等预处理后,使用KPU神经网络加速器运行MNIST分类模型,最终在LCD上显示识别结果。重点讲解了分类模型与检测模型的区别、图像预处理流程以及KPU推理结果的解析方法。实验帮助理解从图像采集到分类输出的完整AI视觉处理链路,并提供了调试思路和硬件连接说明。

Mr数据杨 366

linux 内核OOM问题定位-SLAB_DEBUG

首先看slabinfo按的size排序查看 slub object,可以查看 space 总占用大小,及objects个数判断泄漏点 为kmalloc-128。那个泄露多看/sys/kernel/debug的slab/kmalloc*-的alloc-traces和free-traces。SLAB或者SLUB有一个用就可以,改menuconfig没有clean会覆盖之前的更改,现在看一下编译的过程。或者配置defconfig,配置完之后需要clean后再编译。1,配置menuconfig。

陌上花开缓缓归以的博客 900

【vim】保存文件没有权限 :w !sudo tee %

每当你打开一个你没有写入权限的文件(比如系统配置文件)并做了一些修改,Vim 无法通过普通的 “:w” 命令来保存。 你不需要重新以 root 方式打开文件再进行修改,只需要运行: :w !sudo tee % 这会直接以 root 方式保存。 转载于:https://www.cnblogs.com/music378/p/8005395.html...

weixin_30559481的博客 376

室内无线传播损耗分析与传播模型验证课程设计

室内无线传播损耗分析与传播模型验证课程设计

a_zxswer的博客 187

用vi修改文件,保存文件时,提示没有修改该文件的权限“E45: ‘readonly’ option is set (add ! to override)”的解决方法(已解决)。

3.若该文件所有人都关闭了,提示有的人没有关闭,则删除该文件的临时文件则可以正常打开、修改、保存。(3).然后就能正常保存了,你可以输入 :wq 来保存文件了。2.如果有root权限,可以:wq!(2).输入 :set noreadonly。1.进入vim之前 执行su root。vim退出 先按esc 在:wq。

sdajgfd的博客 1998

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux修改文件保存时报错E45: 已设定选项 ‘readonly‘ (请加 ! 强制执行)

linux强制保存

weixin_53592309的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android 文件保存!Sdcard !

//将bitmap对象转换为byte[] 数组~ void savePic(Bitmap bm, String fileName) {   ByteArrayOutputStream baos = new ByteArrayOutputStream();   bm.compress(Bitmap.CompressFormat.PNG, 100, baos);   saveData(file

shenxiaolinil的专栏 2148

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

在Vim中无需权限即可保存编辑的文件:使用 ‘:w !sudo tee %‘ 命令的技巧

在Vim中无需权限即可保存编辑的文件:使用 ':w !sudo tee %' 命令的技巧

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 2317

vscode如何保存文件_私密文件(你懂的)如何保存,这样保存最安全!

私密视频照片(你懂的)如何保存,这样保存最安全--电脑篇文件夹隐身所谓文件夹隐身指得是文件夹在某个位置,但看不见,用鼠标却能选中、点击打开。本文以Win7为例说明,Win10系统此功能大同小异自行变通研究。Step 1:通过“Ctrl+Backspace”键,输入文件夹的空白名称Step 2:进入文件夹“属性”,点击“更改图标”,在图标列表中找到“空白图标”,确定并应用文件夹隐藏隐藏文件夹会彻底改...

weixin_33509600的博客 2344

如何把准考证保存为文件_死机了!如何恢复没来得及保存的 Excel 文件?

每个人都曾经遇到过这种情况:Excel 编辑了大半天,电脑突然死机,出现蓝屏。天啊!还没来得及保存,大半天的工作成果付诸东流。还有同学遇到更乌龙的事件:做了一整天表,眼看大功告成可以准时下班了,心情一激动,不小心一脚踢在了主机电源按键上……正所谓乐极生悲。怎么办?加班重做吗?当然不需要,关注本号的宝宝们,运气都不会太差。今天就教大家如何恢复没来得及保存的 Excel 文件。解决方案:1. 打开一个...

weixin_42131798的博客 669
上一篇: android中Parcelable接口的使用
下一篇: 仿QQ未读消息拖拽删除粘性效果
CoderLiLe
博客等级 码龄11年 2粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值