【问题标题】:Fragments lifecycle片段生命周期
【发布时间】:2016-10-19 07:33:52
【问题描述】:

我正在学习有关我有一些疑问的片段。考虑以下代码:

FragmentManager fm = getFragmentManager();  
Fragment MyFragment = new Fragment();  
fm.beginTransaction().replace(R.id.my_container, MyFragment).addToBackStack(null).commit();

我的问题是:

  1. replace 到底有什么作用?
  2. 如果我以这种方式创建许多片段(替换容器中以前的片段)会发生什么。
  3. 它对内存使用有任何影响吗?
  4. 仅仅改变片段的内容会不会好很多?

【问题讨论】:

  • 它并没有真正的帮助。我已经找到了有关它的基本信息,但我正在考虑细节。就像替换片段发生的事情一样,让它们保持沉重的记忆等等。

标签: android android-fragments android-lifecycle


【解决方案1】:
  1. 替换删除容器中的所有片段并将新片段添加到容器中。 (如果容器中没有片段,那么它只会添加新片段)。
  2. 如果您以这种方式创建许多片段,则每个事务都会保存到后台堆栈中,因此您可以通过按后退按钮来撤消事务。
  3. 您唯一能做的就是创建一个变量 fragmentTransaction 并只使用一次 fm.beginTransaction(),而不是每次要替换容器中的片段时使用。
  4. 我不这么认为,片段应该是模块化和可重复使用的。

您可以在此处阅读更多内容: https://developer.android.com/guide/components/fragments.html

【讨论】:

    【解决方案2】:
    1. 简单地在容器上放置另一个“层”。
    2. 应用程序崩溃
    3. 是的
    4. 不,片段是最简单的方法。

    如果你想再次调用fragment并处理返回按钮,使用fragment & backstack标签来引用一个Fragment。

    fm.beginTransaction().replace(R.id.my_container, MyFragment, "FRAGMENT_TAG").addToBackStack("FRAGMENT_BACKSTACK_TAG").commit();
    

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 2020-07-14
      • 2013-06-23
      • 1970-01-01
      相关资源
      最近更新 更多