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

2024-05-06 12:44

本文主要是介绍Android中TabLayout与ViewPager结合使用生命周期详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

<?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.TabLayoutandroid: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.ViewPagerandroid: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.sizeoverride fun getItem(position: Int) = listFragment[position]override fun getPageTitle(position: Int) = titles[position]
}

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

    @Deprecatedpublic 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.sizeoverride fun getItem(position: Int) = listFragment[position]override fun getPageTitle(position: Int) = titles[position]
}

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

这篇关于Android中TabLayout与ViewPager结合使用生命周期详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964388

相关文章

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Java中的JSONObject详解

《Java中的JSONObject详解》:本文主要介绍Java中的JSONObject详解,需要的朋友可以参考下... Java中的jsONObject详解一、引言在Java开发中,处理JSON数据是一种常见的需求。JSONObject是处理JSON对象的一个非常有用的类,它提供了一系列的API来操作J

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB