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)的逻辑仅仅是为了启动片段。你能告诉我每个人的优点和缺点吗?
答案 0 :(得分:1)
确实没有"对"做这些事情的方法。有推荐的方法,有最佳实践,有共同的用法 - 但所有这些都取决于您,开发人员需要做些什么来为您的用户提供最佳体验以及为开发人员提供最佳清晰度和组织。通过这些事情进行思考将为您的特定情况提供最佳答案。
要解决您的特定问题,请考虑活动的作用,目的是什么,然后考虑为什么需要碎片。来自Android文档:
活动是一个提供屏幕的应用程序组件 哪些用户可以进行互动以便做某事......
对于碎片:
Fragment表示一个行为或用户界面的一部分 活性。
所以,即使从每个文档的第一句开始,我们也看到了两个组件的定义目的。活动就是用户的活动。它是一个屏幕,其目的是允许用户进行某些操作。另一方面,片段是一种模块化设计,为附加到活动的用户提供UI和其他交互元素和数据。换句话说,它通过提供某种交互点或一些可见的数据形式,帮助用户完成Activity希望他们做的事情。
现在我们已经明确了这两个组成部分的目的,问问自己,你的问题中活动B的目的是什么。它会为用户提供新的事物或看到的东西(即使通过使用片段B)?它会提供与用户在活动A中所做的不同的东西吗?如果是这样,那么新的Activity可能是最好的设计选择。但是,如果片段B只是另一种方式来做任何用户应该在活动A中做的事情,或者那种活动的某种扩展,那么你最好的选择是活动A简单地用片段B替换片段A本身通过FragmentTransaction。
答案 1 :(得分:0)
使用片段的整个想法是创建灵活的设计。意味着您可以使用相同的视图容器来显示具有不同功能的不同内容。因此,很明显,如果需要显示不同的片段,则应在容器中替换它。 在某些情况下,您可能更喜欢使用不同的活动,例如。在启动设置时,如果它只是一个可以使用相同活动进行上下文化的不同内容,请务必使用片段管理器替换容器。
答案 2 :(得分:0)
这不是关于优势,而是关于你想做什么。
Fragment表示一个行为或用户界面的一部分 活性
现在,如果您希望Fragment成为第一个活动的一部分,那么您将以第二种方式启动它。那是
Fragment b = AddRecordFragment.init(Integer.valueOf(f.getId()));
getFragmentManager().beginTransaction().replace(R.id.container,b).addToBackStack(null).commit();
但是如果你想让它成为第二个活动的一部分,你就是第一种方式。
取决于片段应该属于哪个活动。