首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在调用popbackstack()之后,所有添加的片段都会显示出来,为什么?

在调用popbackstack()之后,所有添加的片段都会显示出来的原因是因为popbackstack()方法会将Fragment事务回退到指定的状态,但并不会立即执行回退操作。相反,它会将回退操作添加到Fragment事务的回退栈中,并在下一次执行事务时才会执行回退操作。

当调用popbackstack()方法后,FragmentManager会检查回退栈中的事务,并将最近的一个事务执行回退操作。这意味着之前添加的片段将会重新显示出来,因为它们的状态被还原到了添加时的状态。

需要注意的是,popbackstack()方法只会执行一次回退操作,如果希望连续执行多次回退操作,需要多次调用popbackstack()方法。

总结起来,调用popbackstack()方法后,所有添加的片段都会显示出来,是因为该方法将回退操作添加到了Fragment事务的回退栈中,并在下一次执行事务时才会执行回退操作,从而还原之前添加的片段的状态。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Fragment 基础知识

    如果一个fragment已经进来的话,再次添加的话会报异常错误 添加进来fragment都是可见(visible),后添加fragment会展示在先添加fragment上面,绘制界面的时候会绘制所有可见...: 如果我们使用replace来切换页面,那么每次切换时候,Fragment都会重新实例化,重新加载一边数据,这样非常消耗性能和用户数据流量。...这是因为replace操作,每次都会把container中现有的fragment实例清空,然后再把指定fragment添加进去,就就造成了切换到以前fragment时,就会重新实例会fragment...:由于是将fragment添加到ADD队列,所以只能添加到列队头部,所以attach()操作结果是,最新操作页面始终显示最前面,由于这里会将fragment添加到ActivityADD队列中,所以在这里调用...也就是说activity调用了onSaveInstanceState()之后,再commit一个事务就会出现该异常。

    66820

    Android 多返回栈技术详解

    这就意味着当您调用 commit() 提交了一个调用过 addToBackStack() 方法 Fragment 事务时,FragmentManager 会执行所有您在事务中所指定操作 (比如 替换操作...当您调用 popBackStack() 方法时 (无论是直接调用,还是通过系统返回键以 FragmentManager 内部机制调用),Fragment 返回栈最上层事务会从栈中弹出 -- 比如新添加...也就是说 popBackStack() 变成了销毁操作: 任何已添加 Fragment 事务被弹出时候都会丢失它状态。...然而,当您使用多返回栈时,name 作用就非常重要了: 调用 saveBackStack() 和之后 restoreBackStack() 方法时,它将作为 Fragment 事务唯一 key...△ 我们保存 profile 返回栈并且添加一个新 commit 后 FragmentManager 状态 替换回来非常简单: 我们可以 "notifications" 事务中同样调用 saveBackStack

    94410

    Android技能树 — Fragment总体小结

    老样子,先上脑图: 我们就按照脑图顺序一样样来看Fragment基础知识。 正文: 1.Fragment添加 我们知道Fragment是一个"碎片(或者片段)",添加在Activity中。...然后网上有很多教程,叫你提交时候使用commitAllowingStateLoss()方法,虽然说不会抛出错误,但是如果在Activity已经保存状态完之后提交了它,到时候Ativity意外崩溃,再恢复数据时候就不会恢复...Activity保存状态之后提交fragment更新,造成状态丢失了。...如果想要立即执行,可以commit之后立即调用FragmentManagerexecutePendingTransactions()方法. 2. commit()方法必须在状态存储之前调用,否则会抛出异常...,原先Fragment字段值将会全部丢失(因为当切换横竖屏时,Fragment会调用自己无参构造函数,那么构造函数传参就会失效),但是通过 Fragment.setArguments(Bundle

    25210

    Android技能树 — Fragment总体小结

    我们就按照脑图顺序一样样来看Fragment基础知识。 ---- 正文: 1.Fragment添加 ? 我们知道Fragment是一个"碎片(或者片段)",添加在Activity中。...然后网上有很多教程,叫你提交时候使用commitAllowingStateLoss()方法,虽然说不会抛出错误,但是如果在Activity已经保存状态完之后提交了它,到时候Ativity意外崩溃,再恢复数据时候就不会恢复...Activity保存状态之后提交fragment更新,造成状态丢失了。...如果想要立即执行,可以commit之后立即调用FragmentManagerexecutePendingTransactions()方法. 2. commit()方法必须在状态存储之前调用,否则会抛出异常...,原先Fragment字段值将会全部丢失(因为当切换横竖屏时,Fragment会调用自己无参构造函数,那么构造函数传参就会失效),但是通过 Fragment.setArguments(Bundle

    1.1K20

    Fragment回退栈及弹出方法

    一、回退栈 在前面两期示例中,当我们完成一些操作后,如果想要回到操作之前状态,一般我们都会按返回键,如下图所示: ?...默认情况下,Fragment事务是不会加入回退栈,如果想将Fragment加入回退栈并实现事物回滚,首先需要在commit()方法之前调用事务以下方法将其添加到回退栈中: addToBackStack...这里Fragment添加、删除、替换案例基础来进行学习,布局代码和Fragment代码不变,只需要在MainActivityonClick方法中增加一行代码即可,代码如下: public class...这就需要我们来多了解事物回滚相关原理,其实在Fragment回退时,默认调用FragmentManager popBackStack() 方法将最上层操作弹出回退栈。...使用popBackStack()来弹出栈内容的话,调用该方法后会将事物操作插入到FragmentManager操作队列,只有当轮询到该事物时才能执行。

    4.5K70

    Navigation深入浅出,到出神入化,再到实战改造

    思考几个问题: 可以代码中用Bundle传递参数,为什么要在XML去配置 XML中参数标签,只能设置和读取,无法XML中跳转是附带传过去,如B页面要求传入name:String,于是<Argment...navigationUp和popBackStack()回退上一级时有什么区别,该如何正确使用 跳转时 有时用是ActionID,有时用是FragmentID 他俩到底什么场景下,区分该将哪个传入方法作为参数...: 上一节点回退栈到当前节点动画 Pop To 按返回键会调用 navController.navigationUp或navController.popBackStack()时,想回退定向到那个节点...这个类 NavHostFragment是Navigation提供默认容器,所有路由逻辑都经过这里,然后分发出去 3....A,B页面都会进入Login页面,但它们有不同权限,所以可以配置不同type,且这种配置基本不会变化。 4.

    59110

    Fragment全解析系列(一):那些年踩过

    getActivity()空指针 可能你遇到过getActivity()返回null,或者平时运行完好代码,“内存重启”之后调用getActivity()地方却返回null,报了空指针异常...比如:你pop了Fragment之后,该Fragment异步任务仍然执行,并且执行完成后调用了getActivity()方法,这样就会空指针。...解决办法: 更"安全"方法:(对于Fragment已经onDetach这种情况,我们应该避免在这之后再去调用宿主Activity对象,比如取消这些异步任务,但我们团队可能会有粗心大意情况...详细原因:从源码角度分析,为什么会发生Fragment重叠?...(如果是replace,恢复形式和Activity一致,只有当你pop之后上一个Fragment才开始重新恢复,所有使用replace不会造成重叠现象) v4-24.0.0+ 开始,官方修复了上述 没有保存

    3.1K20

    Android开发之Fragment回退栈

    Android开发之Fragment动态使用一文中,说到replace方法切换Fragment,会造成Fragment不断销毁、创建,但是有没有办法实现像Activity一样通过栈方式来管理Fragment...一、Fragment回退栈 Activity切换时,相信大家都知道是通过栈形式,不断压栈出栈,Fragment时候,如果你不是手动开启回退栈,它是直接销毁再重建,但如果将Fragment任务添加到回退栈...(); //fl为占位布局 ft.add(R.id.fl, f1); ft.commit(); 3、Fragment1中按钮事件,将当前事务添加到了回退栈 Fragment2 f2 = new Fragment2...回退栈Fragment3返回Fragment2.PNG 此时注意Fragment2生命周期,执行了onCreateView()但未执行onCreate(),因为它只是将界面显示出来了,并没有创建新实例...,每添加一次回退栈该数会加1

    1.2K40

    Android基础:Fragment,看这篇就够了

    Activity中添加Fragment方式有两种: 静态添加xml中通过方式添加,缺点是一旦添加就不能在运行时删除。...首先,onSaveInstanceState()onPause()之后,onStop()之前调用。...FragmentonResume()ActivityonResume()之后调用。 接下去分两种情况,分别是不加addToBackStack()和加addToBackStack()。...这里说弹出所有元素包含回退这些事务。 popBackStack()是异步执行,是丢到主线程MessageQueue执行,popBackStackImmediate()是同步版本。...因为setUserVisibleHint(true)界面可见时都会调用,如果滑到该界面做过数据加载后,滑走,再滑回来,还是会调用setUserVisibleHint(true),此时由于mIsInited

    4.9K122

    《Android基础:Fragment,看这篇就够了》

    首先,onSaveInstanceState()onPause()之后,onStop()之前调用。...FragmentonResume()ActivityonResume()之后调用。 接下去分两种情况,分别是不加addToBackStack()和加addToBackStack()。...是主线程执行,mExecCommit内部就是调用了execPendingActions(),即把mPendingActions中所有积压没被执行事务全部执行。...这里说弹出所有元素包含回退这些事务。 popBackStack()是异步执行,是丢到主线程MessageQueue执行,popBackStackImmediate()是同步版本。...因为setUserVisibleHint(true)界面可见时都会调用,如果滑到该界面做过数据加载后,滑走,再滑回来,还是会调用setUserVisibleHint(true),此时由于mIsInited

    3.9K61

    Android入门教程 | Fragment 基础概念

    例如,当 Activity 暂停时,Activity 所有片段也会暂停;当 Activity 被销毁时,所有片段也会被销毁。...通过 popBackStack()(模拟用户发出返回命令)使片段从返回栈中弹出。 通过 addOnBackStackChangedListener() 注册侦听返回栈变化侦听器。...如果向事务添加多个更改(如又一个 add() 或 remove()),并调用 addToBackStack(),则调用 commit() 前应用所有更改都将作为单一事务添加到返回栈,并且返回按钮会将它们一并撤消...向 FragmentTransaction 添加更改顺序无关紧要,不过: 必须最后调用 commit()。 如果要向同一容器添加多个片段,则添加片段顺序将决定它们视图层次结构中出现顺序。...宿主 Activity 已停止,或片段已从 Activity 中移除,但已添加到返回栈。已停止片段仍处于活动状态(系统会保留所有状态和成员信息)。

    3.5K40

    再看LayoutInflater,这次你可能又会有新认识

    但是前面也说了,一个布局如果没有父布局的话没办法显示出来呀,所以我们又使用了addView()方法将它添加到了一个现有布局当中。...更准确点来讲,所有以layout_开头属性都会失去作用。...为什么修改第三个参数之后会出现这样错误呢?我们现在就来分析一下。 首先关注一下第三个参数名字是什么,attachToRoot。从字面意思上看,是问我们是否要添加到root上面。...,就是问我们要不要将当前加载xml布局添加到第二个参数传入父布局上面。...所以刚才代码当中,我们一开始inflate()方法第三个参数中传入false,那么button_layout.xml布局是不会被添加到mainLayout当中,我们后面就可以手动调用addView

    62400

    Jetpack路由组件学习:深入理解功能强大Navigation架构之接管系统返回操作

    关于真正跳转原理,之后会出专文讲解,敬请关注本公众号,及时获取更文通知。 第二个问题,不深入理解源码情况下,如果被问到,我会直接被问懵。难道是重写onBackPressed()?...但是很吊诡地是,翻遍所有的技术社区,都很难找到讲解它文章。但是它真的很重要,它是Navigation组件基础设施(水和电)。...FragmentActivity1没有调用addToBackStack()方法,而FragmentActivity2调用了。...image.png 「case->popBackStack(null,0)」 image.png 「case2->popBackStack(“s2”,0)」 image.png 「case3->popBackStack...我写得再详细,也有遗漏细节未能表达出来,你读得再认真,不实践一把,你也未必能够真正明白所有的技术要点。所以建议阅读完文章,深入源码实践一把,把文章中知识,转化成自己东西。

    1.4K30

    Laravel5.5 视图 – 创建视图和数据传递示例

    在这个例子中,我们传递了一个 name 变量,视图中通过使用 Blade 语法将其显示出来。 当然,视图还可以存放在 resources/views 子目录中,用“.”号来引用子目录中视图。...: $view = view('greeting')- with('name', 'jack'); 视图间共享数据 有时候,我们需要在所有视图之间共享数据片段,这时可以使用视图门面的 share 方法...,通常,需要在某个服务提供者 boot 方法中调用 share 方法,你可以将其添加到 AppServiceProvider 或生成独立服务提供者来存放这段代码逻辑: <?...注:所有视图 Composer 都通过服务容器被解析,所以你可以 Composer 类构造函数中声明任何你需要依赖。...: View::composer('*', function ($view) { // }); 视图创建器 视图创建器和视图 Composer 非常类似,不同之处在于前者视图实例化之后立即失效而不是等到视图即将渲染

    92921

    Android Compose 新闻App(八)抽屉布局、动态权限、拍照返回

    一、完善新闻数据 那么首先你需要去天行API中去请求相应数据接口,请求之后将这些接口调试一下你就会发现,这五个接口返回数据类型一致,就是我们社会新闻中返回数据结构,那就可以直接复用。...newslist) } 添加代码如下图所示: 下面我们运行一下: 你会发现了这里军事数据图片没有显示出来,我们通过地址看到picUrl值是空字符串...) 添加位置如下图所示: 由于疫情新闻页面我并没有TopBar中写返回按钮,因此我们可以通过疫情新闻页面的浮动按钮点击返回到当前主页面, 代码如下: mNavController.popBackStack...>(null) } mCameraUri用于保存拍照返回图片,imageUir 用于显示页面上,然后我们可以写出这样代码: //TakePicture 调用相机,拍照后将图片保存到开发者指定...赋值之后就会触发这个data,然后就会加载图片uri,就能显示出来了。

    2.2K20

    Android | Jetpack 处理回退事件新姿势 —— OnBackPressedDispatcher

    OnBackPressedDispatcher 整体处理流程: 分发器整体采用责任链设计模式,向分发器添加回调对象都会成为责任链上一个节点。...答:分发器整体采用责任链设计模式,向分发器添加回调对象都会成为责任链上一个节点。当用户触发返回键时,将按顺序遍历责任链,如果回调对象是启用状态(Enabled),则会消费该回退事件,并且停止遍历。...另外,添加回调 addCallback() 方法也要求主线程执行,分发器内部使用非并发安全容器 ArrayDeque 存储回调对象。...该 API API 16 后引入,最好通过 ActivityCompat.finishAffinity() 调用。...该 API API 21 后引入,最好通过 ActivityCompat.finishAfterTransition() 调用。 ---- 5.

    1.6K20

    实践 | Google IO 应用是如何适配大尺寸屏幕 UI

    程序运行过程中,我们可以通过 Kotlin 安全调用操作符 (?.) 来根据当前设备配置确定呈现给用户哪一个视图。...} ... } 小贴士: 即使您不需要数据绑定所有功能,您仍然可以使用 视图绑定 来为您布局生成绑定类,这样就能避免调用 findViewById 了。...双窗格会一直存在,但根据屏幕尺寸,第二窗格可能不会显示可视范围当中。只有在给定窗格宽度下仍然有足够空间时,SlidingPaneLayout 才会同时将两者显示出来。...剩下要做就是当我们知道窗格有多宽之后,选择要 inflate 桩。...应用运行时,数据绑定会调用下面的函数,并将解析自资源文件值作为参数传进去。

    2.1K20
    领券