Android中TabLayout与ViewPager结合使用生命周期详解

news2024/9/24 21:27:53

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
👉点击跳转到教程

效果
在这里插入图片描述
使用的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ViewPagerActivity">

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tableLayout"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        app:layout_constraintTop_toTopOf="parent"
        app:tabGravity="center"
        app:tabIndicatorColor="@color/black"
        app:tabMode="fixed"
        app:tabSelectedTextColor="@color/black"
        app:tabTextColor="#7D7D7D" />

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/tableLayout" />
</androidx.constraintlayout.widget.ConstraintLayout>

ViewPager通过FragmentPagerAdapter派生自PagerAdapter,来呈现 Fragment页面。

ViewPagerAdapter代码如下

class ViewPagerAdapter(val fragmentManager: FragmentManager, val listFragment: List<Fragment>) :
    FragmentPagerAdapter(fragmentManager) {
    private val titles = arrayOf("标签一", "标签二")
    override fun getCount() = listFragment.size

    override fun getItem(position: Int) = listFragment[position]
    override fun getPageTitle(position: Int) = titles[position]
}

这里我们想要探讨的是生命周期这块,如上所示我们是继承的带一个参数的FragmentPagerAdapter,但是已经被废弃了,内部其实实现的是

    @Deprecated
    public FragmentPagerAdapter(@NonNull FragmentManager fm) {
        this(fm, BEHAVIOR_SET_USER_VISIBLE_HINT);
    }

BEHAVIOR_SET_USER_VISIBLE_HINT:这个行为在 FragmentPagerAdapter 中已经过时。它会在每个 Fragment 被设置为用户可见或不可见时调用 setUserVisibleHint() 方法。

我们首次加载该页面会执行如下方法:

在这里插入图片描述
可见首次加载都会执行Fragment的onResume()方法。
当我们在切换标签页的时候,生命周期方法也没有再次执行,因为已经加载过了。

我们现在使用最新的AndroidX中,尽量使用该行为BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
此行为表示只有当前可见的 Fragment 会调用其 onResume() 和 onPause() 方法。因为它会在 ViewPager 切换时仅保留当前 Fragment 的生命周期状态,以提高性能。

class ViewPagerAdapter(val fragmentManager: FragmentManager, val listFragment: List<Fragment>) :
    FragmentPagerAdapter(fragmentManager,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
    private val titles = arrayOf("标签一", "标签二")
    override fun getCount() = listFragment.size

    override fun getItem(position: Int) = listFragment[position]
    override fun getPageTitle(position: Int) = titles[position]
}

首次进入该页面会执行如下方法:
在这里插入图片描述
先执行了标签一的onResume()方法,标签二的onResume()方法并没有执行。
当我们点击标签二会执行如下方法
在这里插入图片描述
再次切换同理。

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

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

相关文章

HDU - 3988 Harry Potter and the Hide Story 题解 数论

Harry Potter and the Hide Story 传送门&#xff08;建议到 vjudge 上去提交&#xff09; iSea is tired of writing the story of Harry Potter, so, lucky you, solving the following problem is enough. Input The first line contains a single integer T T T, indic…

黄历择日网php程序源码/日历老皇历万年历带免登录发布模块

黄历择日网php程序源码/日历老皇历万年历带免登录发布模块&#xff0c;不调用接口的&#xff0c;带数据库带黄历算法类&#xff0c;完整版免授权&#xff0c;完全开源程序&#xff0c;可二开&#xff01; 演示地址&#xff1a; https://s22.21sq.top/ 手机端地址&#xff1a…

等保建设技术建议书(Word原件)

1信息系统详细设计方案 1.1安全建设需求分析 1.1.1网络结构安全 1.1.2边界安全风险与需求分析 1.1.3运维风险需求分析 1.1.4关键服务器管理风险分析 1.1.5关键服务器用户操作管理风险分析 1.1.6数据库敏感数据运维风险分析 1.1.7“人机”运维操作行为风险综合分析 1.2…

Shiro-Action:基于Shiro的RESTful权限管理系统

摘要&#xff1a; 随着RESTful API的广泛应用&#xff0c;对权限管理的需求也日益增长。Shiro-Action是一个基于Shiro的权限管理系统&#xff0c;专注于RESTful风格的URL授权。本文将深入探讨Shiro-Action的设计思路、技术实现以及在实际项目中的应用价值。 一、引言 RESTful…

VGA项目:联合精简帧+双fifo+sobel算法 实现VGA显示

前言&#xff1a;该项目实际上是在很多基础的小练习上合成起来的&#xff0c;例如涉及到uart&#xff08;rs232&#xff09;的数据传输、双fifo流水线操作、VGA图像显示&#xff0c;本次内容在此基础上又增添了sobel算法&#xff0c;能实现图像的边沿监测并VGA显示。 文章目录…

算法学习007-进制转换 c++递归算法实现 中小学算法思维学习 信奥算法解析

目录 C进制转换 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C进制转换 一、题目要求 1、编程实现 小明学c有一段时间了&#xff0c;今天他想做一个进制转换的小程序&#xff0c;将十进…

如何省下5000培训费学会月薪8000的嵌入式Linux?

嵌入式底层开发无疑是一项极为关键的技术&#xff0c;它在众多嵌入式系统中都有着广泛而重要的应用。在当今科技飞速发展的时代&#xff0c;嵌入式系统已经深入到我们生活的每一个角落&#xff0c;成为了我们日常生活中不可或缺的一部分&#xff0c;这也更加凸显了嵌入式开发的…

【Linux极简教程】常见实用命令不断更新中......

【Linux极简教程】常见实用命令不断更新中...... 常见问题1.Waiting for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process xxxx(dpkg) 常见问题 1.Waiting for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process xxxx(dp…

关于图形库

文章目录 1. 概念介绍2. 使用方法2.1 普通路由2.2 命名路由 3. 示例代码4. 内容总结 我们在上一章回中介绍了"使用get显示Dialog"相关的内容&#xff0c;本章回中将介绍使用get进行路由管理.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

stm32单片机开发五、使用I2C连接MPU6050

10轴就是3轴加速度、3轴角速度、3轴磁场强度和1个气压强度 任何一种传感器都不能获得精确且稳定的欧拉角&#xff0c;要想获得精确且稳定的欧拉角&#xff0c;就必须进行数据融合&#xff0c;把这几种传感器的数据结合起来&#xff0c;常见的数据融合算法&#xff0c;一般有互补…

可编程 IP 新星 Story Protocol 何以引领链上文艺复兴浪潮?

当前&#xff0c;随着 Web3 行业发展进入全新阶段&#xff0c;与生成式人工智能&#xff08;AIGC&#xff09;技术融合正在创造潜力新星项目。也是目前的互联网生态下&#xff0c;任何普通民众都有权利创作高质量的音乐、艺术、散文和视频内容&#xff0c;带来了用户生成内容&a…

Verilog中求两个数的差值

根据输入信号a,b的大小关系&#xff0c;求解两个数的差值&#xff1a;输入信号a,b为8bit位宽的无符号数。如果a>b&#xff0c;则输出a-b&#xff0c;如果a≤b&#xff0c;则输出b-a。 接口信号图如下&#xff1a; 代码如下&#xff1a; &#xff08;CSDN代码块不支持Veril…

去斯洛文尼亚旅游最有趣的徒步路线推荐

春天当然要去徒步呀&#xff01;斯洛文尼亚的徒步和登山小径纵横交错&#xff0c;遍布全国&#xff0c;尽管很多人首先想到的是高山地区连绵起伏的山峰&#xff0c;但实际上&#xff0c;在其他地区也有许多值得游览的徒步目的地。 ​ 这些低地地区的徒步路线将带你穿过如画的风…

【小行星数据预处理py-】

#数据的导入 import pandas as pd import numpy as np#导入EXCEL表格数据;na_values指定了将Excel文件中的空单元格转换为NaN df_excelpd.read_excel(C:/Users/galax/Desktop/MBA小行星数据/4000.xls,na_values0) #定义0为缺失值 see_datadf_excel #统计每一列的缺失值个数 pri…

可代替IRS2003的半桥栅极驱动器KP85211A 225V耐压 1A/1.5A

KP85211A是一款 225V 耐压&#xff0c;具有 1A 拉电流和 1.5A 灌电流能力的半桥栅极驱动器&#xff0c;专用于驱动功率MOSFET或IGBT。采用高压器件工艺技术&#xff0c;具有良好的电流输出及出色的抗瞬态干扰能力。可保证开关节点 VS 瞬态 -7V 情况下系统正常工作。可支持开关节…

Leetcode—706. 设计哈希映射【简单】(constexpr)

2024每日刷题&#xff08;127&#xff09; Leetcode—706. 设计哈希映射 数组实现代码 class MyHashMap { public:MyHashMap() {memset(arr, -1, sizeof(arr));}void put(int key, int value) {arr[key] value;}int get(int key) {if(arr[key] -1) {return -1;} return arr…

基于openEuler22.03 LTS环境的docker容器基础

一、说明 本文配置环境为VMware虚拟机或华为云服务器&#xff08;4核CPU&#xff0c;8 GB内存&#xff0c;40GB磁盘&#xff09;&#xff0c;OS为openEuler 22.03 LTS &#xff0c;Linux服务器要求能联网。 二、安装docker 2.1 安装docker软件包 [rootnode01 ~]# dnf -y in…

leetcode尊享面试——二叉树(python)

250.统计同值子树 使用dfs深度搜索&#xff0c;同值子树&#xff0c;要满足三个条件&#xff1a; 对于当前节点node&#xff0c;他的左子树血脉纯净&#xff08;为同值子树&#xff09;&#xff0c;右子树血脉纯净&#xff08;为同值子树&#xff09;&#xff0c;node的值等于…

第27章-配置PPP

1. 概述 2. 工作机制 3. 验证 4. PPP-MP 1. 概述 1.1 背景引入 以太网使用双绞线&#xff0c;广域网使用光纤&#xff1b; ① 定义&#xff1a;PPP协议即点到点协议&#xff1b; ② 应用场景&#xff1a;在串行线路上运行&#xff1b;主要是广域网 ③ 特点&#xff1a; 支持…

PHP 框架安全:ThinkPHP 序列 漏洞测试.

什么是 ThinkPHP 框架. ThinkPHP 是一个流行的国内 PHP 框架&#xff0c;它提供了一套完整的安全措施来帮助开发者构建安全可靠的 web 应用程序。ThinkPHP 本身不断更新和改进&#xff0c;以应对新的安全威胁和漏洞。 ThinkPHP 框架的安全特性&#xff1a; (1) 输入过滤和验证…