【问题标题】:why must a fragment accompany a different activity为什么片段必须伴随不同的活动
【发布时间】:2016-05-11 00:16:32
【问题描述】:

ActivityA 启动 fragmentA。我需要启动fragmentB。有两种方法可以做到这一点,但我不知道哪种方法最好第一种方法,创建一个将启动 FragmentB 的 ActivityB。因此,ActivityA--> ActivityB--> FragmentB。

第二种方式,就是用 FragmentB 替换 FragmentA

Fragment b = AddRecordFragment.init(Integer.valueOf(f.getId()));
getFragmentManager().beginTransaction().replace(R.id.container,b).addToBackStack(null).commit();

当我参加 Udacity 课程时,他们更喜欢第一种方式,但我看不出仅仅为了启动片段而创建第二个活动 (activityB) 的逻辑。你能告诉我每个人的优点和缺点是什么吗?

【问题讨论】:

  • 有点取决于你用它们做什么
  • 你能给我举个例子,说明第一种方法什么时候会有好处吗?
  • 我有一个带有片段的应用程序,当片段将填满屏幕时,我将其作为与主要活动分开的活动的一部分启动。在平板电脑上,当有足够的空间显示两个窗格时,我将片段作为主要活动的一部分启动,以便继续显示主要布局。它是相同的片段,相同的代码,但根据 UI 的行为方式以两种不同的方式使用。片段的设计理念之一就是这种灵活性。希望对您有所帮助。

标签: android android-layout android-fragments


【解决方案1】:

确实没有“正确”的方式来做这些事情。有推荐的方法,有最佳实践,也有常见的用法——但所有这些都取决于您作为开发人员需要做什么来为您的用户提供最佳体验,并为其他开发人员提供最佳的清晰度和组织。仔细考虑这些事情将为您的特定场景提供最佳答案。

要解决您的特定问题,请考虑 Activity 的作用、目的是什么,然后思考您需要 Fragments 的原因。来自 Android 文档:

Activity 是一个应用程序组件,它提供一个屏幕 哪些用户可以交互来做某事...

对于片段:

片段表示一个行为或用户界面的一部分 活动。

因此,即使从每个文档的第一句话开始,我们就已经看到了两个组件的明确用途。 Activity 是用户的活动。这是一个允许用户做某事的屏幕。另一方面,Fragment 是一种模块化设计,它为附加到 Activity 的用户提供 UI 和其他交互元素和数据。换句话说,它通过提供某种交互点或某种可见的数据形式,帮助用户完成 Activity 想要他们做的事情。

既然我们已经阐明了这两个组件的目的,那么问问自己,活动 B 在您的问题中的目的是什么。它会为用户提供一些新的东西来做或看到(即使通过使用片段 B)?它会提供与用户在活动 A 中所做的不同的事情吗?如果是这样,那么是的,一个新的 Activity 可能是最好的设计选择。但是,如果 Fragment B 只是用户在 Activity A 中应该做的事情的另一种方式,或者是该 Activity 的某种扩展,那么您最好的选择是 Activity A 只需用 Fragment B 替换 Fragment A本身通过 FragmentTransaction。

【讨论】:

    【解决方案2】:

    使用片段的整个想法是创建一个灵活的设计。这意味着您可以使用相同的视图容器来显示具有不同功能的不同内容。所以,很明显,如果你需要显示不同的片段,你应该在容器中替换它。 在某些情况下,您可能更喜欢使用不同的活动,例如 f.e.在启动设置时,但如果它只是可以与相同活动上下文化的不同内容,请务必使用片段管理器在容器中替换。

    【讨论】:

      【解决方案3】:

      这不是关于优势,而是关于你想做什么。

      片段代表一个行为或用户界面的一部分 活动

      现在,如果您希望 Fragment 成为第一个活动的一部分,您可以通过第二种方式启动它。那是

      Fragment b = AddRecordFragment.init(Integer.valueOf(f.getId()));
      getFragmentManager().beginTransaction().replace(R.id.container,b).addToBackStack(null).commit();
      

      但如果您希望它成为第二个活动的一部分,您可以以第一种方式启动它。

      取决于片段应该属于哪个活动。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 2022-10-24
        • 1970-01-01
        • 1970-01-01
        • 2012-05-15
        • 1970-01-01
        • 2017-08-29
        相关资源
        最近更新 更多