fragment——之回退栈详解

Android之Fragment回退栈详解 前言:本文将结合开发中的实际需求,来讲解一下Fragment中的回退栈 对于Activity,当按返回键时,能够返回到上一个Activity,但是,当我们Fragment到Activity中时,如果不做任何处理,当按返回键时,当前Fragment都会全部退出,如果想要拥有Activity逐渐退出的效果,我们需要应用一下Fragment中的回退栈.视频地址: 代码地址:案例效果案例描述大家可以自行打 阅读详情
在Android开发之Fragment动态使用一文中,说到replace方法切换Fragment,会造成Fragment不断销毁、创建,但是有没有办法实现像Activity一样通过栈的方式来管理Fragment呢?答案是可以的,本文就来探讨一下。

一、Fragment回退栈

Activity切换时,相信大家都知道是通过栈的形式,不断压栈出栈,在Fragment的时候,如果你不是手动开启回退栈,它是直接销毁再重建,但如果将Fragment任务添加到回退栈,情况就会不一样了,它就有了类似Activity的栈管理方式。

二、准备工作

1、构造三个Fragment

Fragment1有一个按钮,可以跳转到Fragment2
Fragment2有二个按钮,一个跳转到Fragment3,一个回退到Fragment1

Fragment3有一个按钮,可以回退到Fragment2


2、Activity中,初始化添加Fragment1,但不添加回退栈

Fragment1 f1 = new Fragment1();
FragmentTransaction ft = getFragmentManager().beginTransaction();
 //fl为占位布局
ft.add(R.id.fl, f1);

ft.commit();


3、Fragment1中按钮事件,将当前的事务添加到了回退栈


Fragment2 f2 = new Fragment2();
FragmentManager fm = getFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tx.replace(R.id.fl, f2);
//将当前的事务添加到了回退栈
tx.addToBackStack(null);

tx.commit();


4、Fragment2中按钮事件


//回退到Fragment1
FragmentManager fm = getFragmentManager();
//将当前的事务退出回退栈

fm.popBackStack();


//跳转到Fragment3
Fragment3 f3 = new Fragment3();
FragmentManager fm = getFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tx.replace(R.id.fl, f3);
tx.addToBackStack(null);

tx.commit();


5、Fragment3中按钮事件


//回退到Fragment2
FragmentManager fm = getFragmentManager();

fm.popBackStack();


三、测试有回退栈时Fragment的生命周期

(1)初始化

回退栈 init.PNG
此时是正常的,到resume,Fragment1启动并显示

(2)Fragment1 ——> Fragment2

回退栈 Fragment1到Fragment2.PNG
此时注意Fragment1的生命周期,执行了onDestroyView()但未执行Destroy(),因为它只是界面消失了,并没有销毁

(3)Fragment2 ——> Fragment3

回退栈Fragment2到Fragment3.PNG
同上,注意Fragment2的生命周期

(4)Fragment3 ——> Fragment2

回退栈Fragment3返回Fragment2.PNG
此时注意Fragment2的生命周期,执行了onCreateView()但未执行onCreate(),因为它只是将界面显示出来了,并没有创建新的实例;而此时Fragment3退栈,真正销毁了

(5)Fragment2 ——> Fragment1

回退栈Fragment2返回Fragment1.PNG
同上,注意Fragment1的生命周期;此时Fragment2退栈,真正销毁了

(6)返回键退出

回退栈 按返回键退出.PNG
程序退出,Fragment1销毁

另外,可以通过

getFragmentManager().getBackStackEntryCount()

可以得到回退栈中的当前总的个数,每添加一次回退栈该数会加1


转载链接(url: http://www.jianshu.com/p/fe16553ca2ca)

Android开发必备:用adb命令快速定位Fragment状态(附实战案例解析) 本文深入探讨了如何利用adb命令高效调试Android应用中的Fragment状态管理难题。通过解析`adb shell dumpsys activity fragment`的输出,结合实战案例,详细讲解了如何定位Fragment生命周期、回退栈及视图状态,为开发者提供了一套超越传统日志的底层问题定位与分析方法。 阅读详情

相关推荐

【Android-Activity】Fragment的回退栈

本文将介绍fragment回退栈的相关知识: 当我们从一个fragment跳转到另一个fragment的后,如果点击“返回”,此时返回到的是主界面而非上一个fragment,为了解决这个问题,我们可以用到fragment的回退栈。 解决方法: 在获取fragment的时候最后commit之前添加一个fragment回退栈(addToBackStack()) if(fragment!=null){ getFragmentManager().beginTransaction().hide(fragmen

qq_40716430的博客 435

Android开发之fragment回退栈应用

本课程将要讲解Android中非常重要的知识点Fragment,Android 3.0中引入fragments 的概念,Fragment使用方式有静态使用和动态使用,开发中常用的知识点有添加,替换,移除,通信,传值。对于Activity,我们知道,可以一步一步的回退,但是对于Fragment该如何处理?本节将对Fragment中的回退栈知识做重点讲解,让你对Fragment的理解更上一层楼!

Fragment事务回退栈的相关操作在移动端开发中的应用

Fragment事务回退栈是一个重要的概念,它可以帮助我们在Fragment之间进行导航和管理,并且支持用户返回上一个Fragment或者返回到应用的上一个状态。我们学习了如何创建回退栈、从回退栈中弹出Fragment、清空回退栈以及查看回退栈状态的方法。如果我们需要了解回退栈的当前状态,例如获取回退栈中Fragment的数量或者查看回退栈中的Fragment标识符,我们可以使用FragmentManager提供的一些方法。这将清空回退栈中的所有Fragment,并重置回退栈。方法将事务添加到回退栈中。

GexObjectivec的博客 133

实现多个Fragment依次返回(Fragment回退栈简单使用)

一、情景介绍       首先说下什么情况会用到Fragment的回退栈,假设现在要在一个Activity上不停的切换Fragment(在一个Fragment里不停切换Fragment也可以),但是要求我们可以用安卓的返回键返回上一个Fragment这个时候就要用到Fragment的回退栈了 效果图:  二、详细说明       这个回退栈类似于安卓为Activity维护的

qq_22945185的博客 7825

点击退出返回上一个Fragment

fragment回退,fragment之间相互跳转

基于卷积神经网络的人脸识别算法

摘要:近年来,随着科学技术的不断发展,人脸识别技术日渐成熟,使得人脸识别技术的使用率不断增大。例如:门禁、ATM机、公安系统以及新兴起的人机交互等领域,都应用到了人脸识别系统。在人脸识别研究领域中,深度学习扮演着重要的角色。由于深度学习的人脸识别技术凭借其识别率高、识别快等特点,逐渐成为整个领域的主流技术。在众多深度学习算法中,以卷积神经网络为代表的人脸识别系统得到了广泛应用,主要研究内容如下:首先,通过对经典损失函数进行研究,对比每种损失函数的特点,然后根据A-Softmax函数进行改进,借助Margin

yyq2263511327的博客 1万+

Fragment涉及的add、remove和replace方法和回退栈的关系详解

在现在的Android开发中,Fragment属于比较常用的了,在使用Fragment过程中,add、remove和replace这三个方法是比较常用的,也是容易引发歧异的,再加入回退栈的功能就更乱了,那么本文就从实践的角度来说一说这其中的关系。 在开发中,常用的做法是在Activity的布局中放一个FrameLayout,然后以这个FrameLayout为容器,把Fragment当成View(

神仙的师父的专栏 1万+

SAP 更改物料基本计量单位

创建订单单位后,新创建的采购申请、采购合同、采购信息记录均会使用新的订单单位

matinal 當冬夜漸暖 。公众号:matinal 6162

Fragment的使用详解 低版本兼容 回退栈 相互通信 Fragment+RadioButton

之前项目用到了Fragment ,所以也在网上查阅很多关于Fragment的使用,比较杂,因为时间比较久,参考的那些文章我不一一列出来了,下面就是结合别人的文章和我使用过程中的一些心得,欢迎留言纠正。 一、关于Fragment  Fragment(碎片)是Android3.0(API等级11)才出现的,主要是更动态和灵活的支持phone和pad。 如下图: 在pad

Sam_WangFlower的专栏 1110

Dify与钉钉轻量级集成:打造企业内部AI助手

企业级聊天机器人开发已成为提升内部协同效率的关键技术。其核心原理在于通过API集成,将AI模型能力与即时通讯平台无缝连接,实现智能问答与自动化流程。从技术价值看,这种集成方案能够显著降低AI应用落地门槛,将前沿的AI能力快速转化为实际生产力。在应用场景上,它尤其适用于HR答疑、IT技术支持、产品知识库等高频内部服务场景。本文聚焦于Dify与钉钉的轻量级集成方案,通过Stream模式实现高效消息处理,并利用AI卡片支持流式输出,为企业构建体验自然的智能机器人提供了完整实践路径。该方案特别强调配置简化与部署便捷

weixin_27155667的博客 698

PCB工程师必看:别再搞错1078玻纤布的Dk了,手把手教你算等效介电常数

本文为PCB工程师提供了1078玻纤布等效介电常数(Dk)的详细计算指南,帮助解决高速设计中的信号完整性问题。通过解析玻纤布结构、混合介质理论和实战计算方法,指导工程师准确设置EDA工具参数,避免常见的Dk计算误区,提升设计精度和仿真准确性。

weixin_42546392的博客 399

Fragment

Fragment Fragment是Android的视图生命周期控制器(带生命周期的自定义View),是Activity上的View层级中的一部分,一般可以把它看做一个轻量级的Activity.与传统的Activity相比,它只占用更少的资源,并且提供更大的编码灵活性、在超低版本上的兼容性等. 使用 Fragment 能得到较好的运行效果,并且能将过渡动画兼容到更低的版本(通过FragmentTr...

weixin_33851177的博客 983

jira bug 仪表盘

背景: 更直观管理bug,方便项目组内人员,创建、修改、关闭bug 使用的场景: 筛选器结果:可用来展示open、什么级别open的问题,方便督促开发快速解决问题 2维筛选器统计:统计经办人下bug状态是open,具体什么等级的数量。有利于开发可以调整工作进度 问题统计: 统计某版本,产出对应等级的bug数量,用于后期测试报告的编写 饼图:直观展示筛选人员的bug,例如想要看出每位测试人员产出bug比例 创建与解决的问题对比图: ...

chuanying_xiaoqi的博客 814

Android Fragment回退栈

一、为什么需要回退栈 Activity切换时是通过栈的形式,不断压栈出栈,在Fragment的时候,如果你不是手动开启回退栈,它是直接销毁再重建,但如果将Fragment任务添加到回退栈,情况就会不一样了,它就有了类似Activity的栈管理方式。 二、不使用回退栈的方式 Fragment1 f1 = new Fragment1(); FragmentTransaction ft = getFragmentManager().beginTransaction(); //fl为占位布局 ft.add(R.i

分享Android开发知识 500

2025华为杯第二十二届中国研究生数学建模竞赛E题:高速列车轴承智能故障诊断问题 - 完整解题分析+完整MATLAB源码!

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1994

【Envi风暴】Envi5.6安装图文教程(附Envi5.6完整版下载)

【Envi风暴】Envi5.6与应用商店app store安装图文教程(附Envi5.6完整版下载)从文末网盘下载完整的ENVI5.6安装包,如下所示:双击envi56-win.exe,开始安装。将f__x64下的两个补丁文件拷贝到安装路径。将f__x86下的两个补丁文件拷贝到安装路径。

智慧空间实验室 9204

Activity->Activity中动态添加Fragment->Fragment回退栈BackStack

Activity中动态添加Fragment->Fragment回退栈BackStack的Kotlin代码

sunshine_guo的博客 1287

《使用R包ggtree进行进化树的绘制与美化》

都2023年了,才去使用Y叔早在2018年发表的进化树构建利器——ggtree。刚好最近在做基因家族分析,进化树的构建与美化确实有点麻烦,先前使用MEGA11进行了绘制,但图像简陋,于是导出了nwk文件,准备使用其他软件进行美化。这里,我使用ggtree包进行操作。

沉香best的博客 6896

利用adb命令解析Fragment堆栈状态与层级关系

本文详细介绍了如何利用adb命令,特别是`adb shell dumpsys activity fragment`,来透视Android应用中Fragment的运行时状态。通过解析命令输出的关键字段,如Active/Added Fragments列表、生命周期状态(mState)、回退栈嵌套深度(mBackStackNesting)及层级关系,开发者可以精准诊断Fragment重叠、返回逻辑异常、状态丢失等常见问题,实现高效的界面问题调试。

red88的博客 990

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android-Jetpack-Demo中的Navigation组件:实现Fragment与BottomNavigation无缝切换

Android Jetpack的Navigation组件是实现Fragment与BottomNavigationView无缝切换的核心工具,它通过统一的导航图管理和类型安全的参数传递,大幅简化了多页面应用的开发流程。本文将以Android-Jetpack-Demo项目为基础,详细介绍如何利用Navigation组件构建流畅的底部导航体验。 ## 一、Navigation组件基础架构 Navig

gitblog_00494的博客 265

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Fragment 事务 回退栈

一些相关API1、Fragment常用的三个类:android.app.Fragment 定义android.app.FragmentManager 用于在Activity中操作Fragmentandroid.app.FragmentTransaction 保证一些列Fragment操作的原子性。事务2、FragmentManager可以做的事情: 使用findFragmentById (适用于在...

weixin_33696822的博客 213

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Fragment回退栈

所谓的回退栈管理其实就是将事务添加到栈中,每次popBackStack返回之前的状态。添加第二个Fragment时 Fragment1隐藏事务添加到回退栈,显示Fragment2.添加第三个Fragment时 Fragment2隐藏事务添加到回退栈,显示Fragment3.如上管理,添加第一个Fragment时 Fragment1可见。直接回退到Fragment1可见的状态。

qq_40194724的博客 534

框架学习七-2:ViewPager+Fragment之Fragment深入介绍

1、常用API 2、管理回退栈 3、处理运行时配置发生变化 4、使用Fragment创建对话框 5、Fragment与ActionBar、MenuItem集成

mwj_88的专栏 3750
上一篇: ListView如何单独刷新一个item
下一篇: Task和Activity回退栈详解
LXB-89
博客等级 码龄11年 34粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值