【问题标题】:How to Handle OnResume for Multiple Fragments in stack with a single Activity如何使用单个 Activity 处理堆栈中的多个片段的 OnResume
【发布时间】:2018-03-12 14:34:07
【问题描述】:

我有一个场景,在单个 Activity 中将有 5 个片段添加(而不是替换)彼此堆叠。当活动恢复时,我注意到所有片段的 OnResume 都被调用,我认为这是根据生命周期。

如果我正在处理任何数据或根据从我的任何片段的 OnResume 中的前一个片段传递的数据进行 UI 更改,这些更改也会发生。是否有任何设计模式或任何方法来处理这种特殊情况?也就是说,当 Activity 恢复时,不得调用堆栈下的 Fragment 的 OnResume。

【问题讨论】:

  • If I am handling any data or doing UI changes based on the data passed from previous fragment in the OnResume of any of my Fragments they will also get initialized. 什么会被初始化??
  • @SantanuSur 对不起我的错。我将编辑问题。实际上我想说,如果我正在处理任何数据或根据从我的任何片段的 OnResume 中的前一个片段传递的数据进行 UI 更改,那么在堆栈中的片段的 OnResume 中完成的 UI 更改也是正在发生。
  • 所以当 Activity 加载时,你也同时加载了所有的 Fragment?这些片段是如何对齐的?喜欢标签布局?还是它们都可见?此活动的外观如何?
  • @Variag 不,我正在一一添加。前任。 Frag1- Home,frag2-Profile,frag3-details,然后 4 和 5 类似。它们采用框架布局。一个接一个。在后台添加

标签: android android-fragments design-patterns onresume activity-lifecycle


【解决方案1】:

如果我做对了,您可以定义 bool firstRun; 并将其设置为您活动的 onCreate() 中的 true。然后在活动的onResume()中查看:

  1. 第一次运行时它将是true,因此将其更改为false
  2. 第二次恢复是false

然后在活动中创建getter,它将返回您的firstRun值并在片段onResume()中检查它:

public onResume() {
   MainActivity activity = (MainActivity) getActivity();
   if (activity != null && activity.isFirstRun()) {
     // should execute only when activity starts for the first time
   }
}

【讨论】:

  • 谢谢。我可以通过这种方式完成它。但我认为这不是最佳做法。所以我正在寻找更好的方法
猜你喜欢
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2013-08-05
相关资源
最近更新 更多