展开说说:Android Fragment完全解析-卷二

书接上回,说一下fragment搭配Viewpager的使用。

  1. 是什么

Fragment已经在卷一整理过了,这里说一下ViewPager,ViewPager是一个可以左右滑动的容器组件,继承自ViewGroup。一般是用在首页banner和详情页的轮播图展示、APP首次使用的新手引导页、还可以在APP首页和Fragment搭配使用。本篇分析fragment搭配Viewpager的使用。

  1. 怎么用

Viewpager需要和Adaper配合使用,通过viewPager.setAdapter(pagerAdapter);

方法可知要传入一个PagerAdapter对象。

三个重要方法:

(1)public void setAdapter(@Nullable PagerAdapter adapter) : 设置ViewPager的适配器。

(2)public void addOnPageChangeListener(@NonNull OnPageChangeListener listener):

设置页面改变事件监听器,可以监听当前页面所在的索引,以及页面滑动具体位置,下面细说。

(3)public void setCurrentItem(int item) :可以设置viewpager显示第几个元素,可以是第几个图片或者fragment。

2.1新建adapter,写一个类继承PagerAdapter

//fragment切换的Viewpageadapter
public class MyPagerAdapter extends FragmentPagerAdapter {private List<Fragment> fragments=new ArrayList<>();private FragmentManager fm;public MyPagerAdapter(FragmentManager fm , List<Fragment> fragments) {super(fm);this.fm=fm;this.fragments.clear();this.fragments.addAll(fragments);}@Overridepublic Fragment getItem(int position) {return fragments.get(position);}@Overridepublic int getCount() {return fragments.size();}}

这里补充一下PagerAdapter是个抽象类,FragmentPagerAdapter FragmentStatePagerAdapter都是它的两个实现类。

FragmentPagerAdapter加载Fragment内存开销比较大,但页面切换比较丝滑;FragmentStatePagerAdapter内存占用少,页面切换效果略逊一筹。我这里就四个Fragment因此用了FragmentPagerAdapter,应用开发中请大家根据实际情况选择。

2.2 准备fragment并设置Adapter

fragmentHome = new FragmentHome();
fragmentApp = new FragmentApp();
fragmentMsg = new FragmentMsg();
fragmentMy = new FragmentMy();//使用Viewpage切换
fragments.add(fragmentHome);
fragments.add(fragmentApp);
fragments.add(fragmentMsg);
fragments.add(fragmentMy);MyPagerAdapter pagerAdapter = new MyPagerAdapter(manager, fragments);
viewPager.setAdapter(pagerAdapter);pagerAdapter.notifyDataSetChanged();

2.3 在Activity的onCreate中设置完adapter以后,展示首页Activity时切换到第一个fragment

//借助Viewpage切换fragment
viewPager.setCurrentItem(0);

2.4设置监听方法

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {Log.e(TAG, "viewPager-onPageScrolled: position=" + position + "   positionOffset=" + positionOffset + "   positionOffsetPixels=" + positionOffsetPixels);}@Overridepublic void onPageSelected(int position) {Log.e(TAG, "viewPager-onPageSelected: position= " + position);viewPager.setCurrentItem(position);}@Overridepublic void onPageScrollStateChanged(int state) {Log.e(TAG, "viewPager-onPageScrollStateChanged:  state=" + state);}
});

3、啥原理

3.1 ViewPager为什么可以滑动?

因为ViewPager重写了View类的computeScroll方法,并在computeScroll中调用onPageScrolled并且里还调用了view的scrollTo实现view滑动,重写view中的这个方法,computeScroll和scrollTo配合专门负责实现滑动的
     

3.2再说三个关键回调方法

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)页面滚动的所以和坐标变化

public void onPageSelected(int position) 一次完整滑动结束以后这个方法返回当前索引,上面的例子时在这里调用 viewPager.setCurrentItem(position);切换了fragment,其实引导页或者详情页轮播图切换时当前页码或者底部小圆点都时在这里进行切换。

public void onPageScrollStateChanged(int state)页面的滑动状态,定义了几个常量值:

   /**
     *       * Indicates that the pager is in an idle, settled state. The current page
     *      * is fully in view and no animation is in progress.
     *      public static final int SCROLL_STATE_IDLE = 0; //滑动停止
     *
     *      * Indicates that the pager is currently being dragged by the user.
     *      public static final int SCROLL_STATE_DRAGGING = 1;  //开始滑动
     *
     *      * Indicates that the pager is in the process of settling to a final position.
     *      public static final int SCROLL_STATE_SETTLING = 2;  //正在滑动
     */

个人总结记录,才疏学浅,如有错误,欢迎指正,多谢。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】LRU缓存

LRU缓存 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存是一种缓存淘汰策略&#xff0c;用于管理缓存中数据的存储和淘汰。LRU缓存会优先淘汰最近最少使用的数据&#xff0c;以便为新数据腾出空间。它通常用于提高应用程序的性能&#xff0c;通…

《深入浅出.NET框架设计与实现》笔记1——.NET CLI 概述

.NET CLI&#xff08;NET 命令行接口&#xff09;工具是用于开发生成运行和发布.NET应用程序的跨平台工具链。 一、CLI命令 默认安装的命令有 1、基本命令 new restore build publish run test vstest pack migrate clean sln help store 2、项目修改命令 add package add …

使用easyexcel将csv转为excel

一.背景 供应商系统下载的csv文件不支持域控&#xff08;主要是第三方wps服务不能对csv文件加密&#xff0c;但是可以对office系列产品进行权限访问的加密控制&#xff09;。因此思路就改为现将csv文件转为excel文件&#xff0c;然后对excel文件进行加域控制。本文主要介绍如何…

12.Hexo helpers类似函数和data folder数据文件夹

helper Hexo里的helper&#xff0c;或者说是函数 基本上就是小函数&#xff0c;可以在layout布局中使用&#xff0c;可以允许做一些事情 如字符串操作、检查true或false、检查是否在一个页面上、打印出某个页面中的日期或时间特定格式 打开index.ejs trim 可以通过 <%…

向量数据库的崛起:如何改变数据存储与机器学习的未来

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

ExpertPrompting:指导大语言模型成为杰出专家

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 论文地址&#xff1a;https://arxiv.org/abs/2305.14688 作者 & 机构&#xff1a;Benfen…

金融领域思考-前言

1背景介绍 不知不觉已经进入金融领域并且从事支付相关研发工作2年&#xff0c;2年了&#xff0c;应该是一个非常重要的分水岭。但越学习&#xff0c;越了解&#xff0c;越知道金融领域的复杂性。故希望借助写博客整理相关思绪&#xff0c;每有会意&#xff0c;便会记录&#x…

3.车载网络诊断测试用例标准与示例(车载网络诊断测试平台)

文章目录 1.概述2.测试用例2.1 用例名字2.2 用例ID2.3 测试需求来源2.4 测试环境2.5 测试目的2.6 前提条件2.7 手动/自动2.8 测试步骤2.9 评价标准2.10 备注2.11 测试结果2.12 测试数据3.测试用例示例4.其他1.概述

Linux嵌入式驱动开发-阻塞IO与非阻塞IO

文章目录 阻塞与非阻塞访问简介阻塞访问的实现等待队列等待队列头等待队列项从等待队列头添加/移除等待队列项等待唤醒等待事件API 非阻塞访问的实现轮询poll 函数原型可以返回的资源状态 阻塞与非阻塞访问简介 **IO&#xff1a;**Input/Output&#xff0c;也就是输入/输出&am…

环境感知——自动驾驶模型训练(菜鸟版本)

简述 本文用仿真工具录制下训练数据后&#xff0c;存到本地CSV文件中&#xff0c;本文仅用方向盘转角速度进行训练。 代码示例采用Jupyter编码&#xff0c;如在其他编辑器运行问题&#xff0c;请使用Jupyter. CSV文件中存储的数据如下&#xff1a; "center",&quo…

Mysql学习大纲

文章目录 整体大纲总结 整体大纲 大纲 MySQL在金融互联网行业的企业级安装部署mysql启动关闭原理和实战&#xff0c;及常见错误排查 花钱9.9 订阅了专栏MySQL字符集和校对规则史上最详细的Mysql用户权原理和实战&#xff0c;生产案例InnoDB引擎原理和实战&#xff0c;通俗易懂…

IoT、IIoT、AIoT的区别是什么?

一、IoT、IIoT、AIoT的区别是什么&#xff1f; IoT、IIoT和AIoT都是物联网&#xff08;Internet of Things&#xff09;的不同应用和发展方向&#xff0c;但它们之间存在一些区别。 IoT&#xff08;物联网&#xff09;&#xff1a;物联网是指通过互联网连接各种物理设备&#x…

Arcgis 定义投影、投影变换、导出栅格为tif

目录 一、Arcgis 定义投影 1、定义投影 2、设置平移 二、投影变换 1、栅格数据的投影变换 2、矢量数据的投影变换

【Linux】小知识点温习---命令

许多常见命令会用&#xff0c;但是很少注意他们的区别&#xff1b;亦或在学习中使用较少&#xff0c;容易忘记&#xff0c;今天做一个回顾。 ls系列 -a:显示所有文件&#xff08;包括隐藏文件&#xff09; -l:将文件以竖列形式显示 -i&#xff1a;显示文件的inode编号 pwd 显…

MacOS 文件系统种类及介绍

MacOS 文件系统种类 详细介绍 详细介绍 从图片中我们可以看到一个文件系统选择器的界面&#xff0c;列出了多种不同的文件系统选项。这些文件系统各有其特点和用途&#xff0c;以下是它们之间的主要区别&#xff1a; APFS&#xff1a;Apple File System&#xff0c;是苹果公司为…

车载电子电器架构 —— 功能安全开发(首篇)

车载电子电器架构 —— 功能安全开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己…

2.2 海思SS928开发 - 编译测试 - kernel

2.2 编译测试 - kernel 创建仓库 在 gitlab 上创建 SS928 kernel 仓库&#xff0c;并命名为 SS928_KERNEL_V4.19。 进入开发虚拟机&#xff0c;克隆仓库&#xff1a; cd ~ mkdir -p hiss928/kernel && cd hiss928/kernel git clone http://gitlab.xxx.com/KERNEL/SS9…

acwing算法提高之图论--欧拉回路和欧拉路径

目录 1 介绍2 训练 1 介绍 本专题用来记录欧拉回路和欧拉路径相关的题目。 相关结论&#xff1a; &#xff08;1&#xff09;对于无向图&#xff0c;所有边都是连通的。 &#xff08;1.1&#xff09;存在欧拉路径的充要条件&#xff1a;度数为奇数的结点只能是0个或者2个。 &…

江西智博环境| 邀您参加2024全国水科技大会暨技术装备成果展览会

展位号&#xff1a;A28 企业介绍 江西智博环境技术有限公司始创于2008年初&#xff0c;总部位于江西省域副中心城市-赣州。公司主要从事一体化净水设备、单村供站、泵船、无负压供水设备自动化控制系统、低配电系统、工艺设备及智慧水务的设计研发、生产、销售、安装、调试等业…

kubeadm 升级 k8s集群 1.17到1.20

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes 基础学习 系列文章&#xff0c;主要讲解 使用kubeadm&#xff0c;将kubernetes集群从1.17升级到1.20 1.kubernetes一般不要跨大版本升级 一般来说&#xff0c;跨越多个主要版本的升级需要逐个升级每…