当前位置: 首页 > 知识库问答 >
问题:

对片段生命周期方法的调用随着每次方向变化而增加

吴弘壮
2023-03-14

方向从一个片段改变到另一个片段。

方位1(景观至肖像):

  • 片段1的OnSaveInstanceState()。
  • 片段2的OnSaveInstanceState()。
  • 片段2的
  • onstop().
  • 片段1的
  • ondestroy().
  • 片段1的
  • ondetach()。
  • 片段2的onattach().
  • 片段2的oncreateview()。
  • 片段2的
  • onstart().
    null

我是这样添加片段的-

Fragment1 firstFragment = new Fragment1();
Bundle bundle = new Bundle();
firstFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();

更新:

因此,每当我单击任何选项卡时,AddToBackStack都会将选项卡片段添加到容器中,从而减少内存并调用重复的生命周期方法。

这些不是干净的解决方案,会导致其他问题。

共有1个答案

燕意蕴
2023-03-14

造成生命周期的可能原因可能是,没有正确地处理片段反堆栈。这就是为什么它可能会多次调用。我也曾用碎片来面对这个问题。但是现在,您可以移除添加到backStack中的片段来继续。

您的代码将变成:

Fragment1 firstFragment = new Fragment1();
Bundle bundle = new Bundle();
firstFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.commit();

在http://www.javacodegeeks.com/2013/06/android-fragment-transaction-fragmentManager-and-backstack.html中可以找到一些处理AddingBackStack到片段的示例

 类似资料:
  • 我有一段代码,调用startActivityForResult()从Android gallery中挑选图像。在调用startActivityForResult()和激活onActivityResult()时,我很难理解片段的生命周期。 “我的活动”检索信息并将其加载到listview。然后,它允许用户通过使用startActivityForResult()向照相机/多媒体资料应用程序发送意图,将

  • 我正在使用以下方法通过显示/隐藏片段(在我的NavigationDrawer中)在片段之间切换。 我不清楚的是,当我显示或隐藏碎片生命周期的哪个方法被调用?(由于没有onShow()或onHide()这样的方法,我不太确定该使用什么)。我想在显示和隐藏某个片段时执行特定的操作。

  • 片段B 奥纳塔奇 OnCreate 停止-片段不可见。宿主活动已停止,或者片段已从活动中移除,但已添加到后堆栈中。停止的片段仍处于活动状态(系统保留所有状态和成员信息)。但是,它对用户不再可见,如果活动被杀死,它将被杀死。 这是否意味着当在同一活动中添加新片段时,不调用当前片段的方法? 然后在片段B中使用 我所期待的是? 片断A的onStart方法被调用,因为片断A现在可见 案例2 片段A 停顿

  • 我尝试使用,但在某些情况下,它不会与一起调用,特别是从Tablayout上最近的选项卡进行片段处理时。 会有什么问题? 是否有其他显式调用的事件?

  • 方法的标注和函数类似: struct Owner(i32); impl Owner { // 标注生命周期,就像独立的函数一样。 fn add_one<'a>(&'a mut self) { self.0 += 1; } fn print<'a>(&'a self) { println!("`print`: {}", self.0); } } fn

  • 用法 组件和虚拟 DOM 节点都有生命周期方法,也叫钩子,它们会在 DOM 元素的生命周期的对应时期被调用。 // 组件中的钩子 var ComponentWithHook = { oninit: function(vnode) { console.log("initialize component") }, view: function() { return "hello