如何延迟Fragment的导航过渡

2023-09-19 10:12:48

前言

做应用提高用户体验是很关键的,对于用户体验来说有一件事是不能回避的,就是页面切换的过渡动画。因为后一个页面可能会加载数据,所以切换时后一个页面是空白的导致用户体验比较差。那么如果下一个页面数据加载可能很快,为了提供流畅的顶级导航过渡,可不可以等待第二个屏幕加载数据,然后再启动动画?

Android中的Fragment就提供了这种功能,通过它可以推迟fragment的载入,这样在界面通过动画过渡到第二个屏幕之前,第二个屏幕上的界面元素(通常是从网络获取的图片)已做好显示准备。这便是:postponeEnterTransition()startPostponedEnterTransition()

postponeEnterTransition

这个函数会延迟Fragment的导航过渡直到执行了startPostponedEnterTransition()executePendingTransactions()。所以这个函数给Fragment提供了推迟动画直到数据都加载完成的能力。

需要注意的是,这个函数必须在fragment被添加到FragmentTransaction之前执行,或者在onCreate, onAttach, onCreateView这几个生命周期中执行。而已这个函数之后必须执行startPostponedEnterTransition()executePendingTransactions,否则fragment的导航过渡无法完成。

startPostponedEnterTransition

这个函数与postponeEnterTransition()搭配使用,可以启动被postponeEnterTransition推迟的导航过渡。而且在postponeEnterTransition()之后必须执行startPostponedEnterTransition()executePendingTransactions,否则fragment的导航过渡无法完成。

这里注意executePendingTransactions()也有同样的效果,如果这次延迟时间被executePendingTransactions()干扰了,那么在startPostponedEnterTransition()执行之前,过渡动画可能没执行也可能已经执行了。所以在使用过程中要特别注意是否有executePendingTransactions()干预。

executePendingTransactions

既然提到了executePendingTransactions(),那么也一起说一下这个函数。

当一个fragment添加到FragmentTransaction并commit之后,导航过渡其实并不是立刻执行,而是被安排异步的在主线程中执行(这点我想大家都比较了解了,所以FragmentTransaction也提供了commitNow()函数)。而executePendingTransactions()可以让这个动作立刻执行,所以它也会强制因postponeEnterTransition()而推迟的导航过渡直接启动。

所以在使用postponeEnterTransition()的时候,一定要注意executePendingTransactions()的存在。

总结

使用起来还是比较简单的,但是注意不能滥用。比如fragment页面数据很多,需要的网络请求可能时间较长,如果你在请求结束后再执行startPostponedEnterTransition(),那么用户点击之后会在当前页面停顿很久才导航到新页面,这样用户体验会很差。所以它适合那些加载较快的操作,比如网络图片,这样在导航过渡时,尤其是有共享元素的时候,下一个页面的对应内容已经准备好了,动画效果会更好。

更多推荐

5G相关信息

5G(第五代移动通信技术)是一种高级的通信技术,包括了多种算法和协议,用于实现高速、低延迟、可靠的无线通信。要实现5G算法,需要深入了解各种子系统和协议的工作原理,并根据需要编写相应的代码。以下是一些与5G相关的核心算法和技术,以及简要的描述:1.**OFDM(OrthogonalFrequencyDivisionMu

【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )

文章目录一、Socket套接字简介1、Socket套接字概念2、Socket套接字类型3、Socket套接字使用步骤4、Socket套接字服务端与客户端二、Socket服务端与客户端开发1、服务端2、客户端3、执行结果一、Socket套接字简介1、Socket套接字概念Socket套接字是一种进程之间的通信机制,通过套

人工智能安全-2-非平衡数据处理(2)

5算法层面代价敏感:设置损失函数的权重,使得少数类判别错误的损失大于多数类判别错误的损失;单类分类器方法:仅对少数类进行训练,例如运用SVM算法;集成学习方法:即多个分类器,然后利用投票或者组合得到结果。6代价敏感算法6.1相关问题经典分类方法一般假设各个类别的错分代价是相同的,并且以全局错分率最低为优化目标。以入侵检

Observability:使用 OpenTelemetry 手动检测 Go 应用程序

作者:LucaWintergerstDevOps和SRE团队正在改变软件开发的流程。DevOps工程师专注于高效的软件应用程序和服务交付,而SRE团队是确保可靠性、可扩展性和性能的关键。这些团队必须依赖全栈可观察性解决方案,使他们能够管理和监控系统,并确保问题在影响业务之前得到解决。整个现代分布式应用程序堆栈的可观察性

SpringBoot接受请求参数

1.简单参数1.1原始方法说明:获取请求传来的name参数,age参数的值。//简单方式@RestControllerpublicclassRequestController{@GetMapping("/books")publicStringsimpleParam(HttpServletRequestrequest){

Java 基础学习总结(207)—— 具有革命性、未来性、开创新纪元的 JDK 21, 它来了

具有革命性、未来性、开创新纪元的JDK21按照官方的时间计划表,今天终于是要正式GA了:https://openjdk.org/projects/jdk/21/GA,就是我上面框起来的“GeneralAvailability”的缩写,直译成中文,虽然是“普通可用”的意思,但是在软件行业,它就代表正式版。如果对外发布一个

慢SQL治理经验总结

在过去两年的工作中,我们团队曾负责大淘宝技术的慢SQL治理工作,作为横向的数据安全治理平台,如何快速准确地发现部门内所有应用的慢SQL,并进行高效的推动治理,同时覆盖多个开发、生产环境,是一个很大的挑战。以下是一些经验分享,我们通过持续的慢SQL推动治理,有效降低了DB相关的线上问题,极大提高了系统稳定性。关于慢SQL

MVVM 模式、Vue 双向绑定原理

MVVM模式是什么传统的MVC指的是,用户操作会请求服务端路由,路由会调用对应的控制器来处理,控制器会获取数据。将结果返回给前端,页面重新渲染MVVM(Model-View-ViewModel)是一种软件架构模式,用于实现界面(UI)和业务逻辑的分离。他的设计目标是将界面的开发与后端的业务逻辑分离,使得代码易于理解、维

为什么要选择Spring cloud Sentinel

为什么要选择SpringcloudSentinel🍎对比Hystrix🍂雪崩问题及解决方案🍂雪崩问题🍂.超时处理🍂仓壁模式🍂断路器🍂限流🍂总结🍎对比Hystrix在SpringCloud当中支持多种服务保护技术:NetfixHystrixSentinelResilience4J早期比较流行的是Hyst

线性回归网络

李沐大神的《动手学深度学习》,是我入门机器学习的首课,因此在这里记录一下学习的过程。线性回归的从零开始实现线性回归是理解机器学习的基础,它经常用来表示输入和输出之间的关系。线性回归基于几个简单的假设:首先,假设自变量X和因变量y之间的关系是线性的,即y可以表示为X中元素的加权和,这里通常允许包含观测值的一些噪声。下面基

行业报告:视频直播美颜sdk对互联网直播产业的影响与前景

随着互联网直播产业的不断崛起,直播内容的质量和用户体验已成为成功的关键因素之一。本篇报告将深入研究视频直播美颜sdk对互联网直播产业的影响,并探讨其未来的前景。第一章:视频直播美颜sdk的基本概念1.1什么是视频直播美颜SDK?视频直播美颜sdk是一种软件工具包,旨在为互联网直播平台和应用程序提供实时的美颜和图像增强功

热文推荐