4

我对使用片段的意识形态正确方式有点困惑。

正如 Android 开发人员所说,

Fragment 表示 Activity 中的一种行为或用户界面的一部分。您可以在单个活动中组合多个片段以构建多窗格 UI 并在多个活动中重用一个片段。您可以将片段视为活动的模块化部分,它有自己的生命周期,接收自己的输入事件,并且可以在活动运行时添加或删除(有点像“子活动”,您可以在不同的活动中重复使用)。

并且:

片段将应用程序功能和 UI 分解为可重用的模块 将多个片段添加到屏幕以避免切换活动

我对片段的使用方式如下:我只有一个主 Activity 和一大堆片段。我更喜欢替换片段,而不是开始活动。例如,我有FeedsFragment, FriendsFragment, MessagesFragment,当我从滑动菜单中选择某些东西时,我的Activity只是替换了 main Fragment。如果我要从其他 Fragment 启动一个 Fragment,我会将前一个 Fragment 放入 backstack。

有些片段需要Activity来改变actionbar,我直接通过

((MainActivity)getActivity()).setupActionBar();

目前我没有任何支持平板电脑布局的代码(如 android 开发人员的示例所示),但我打算添加它。

那么,这是正确的做事方式吗?还是我完全错过了什么?

4

1 回答 1

0

如您所知,片段有自己的生命周期,您可以随时从活动生命周期中使用它的事件。

但是 Fragments 生命周期依赖于 Activity 生命周期,所以当 Activity 被销毁时,Fragment 也会被销毁。

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();    
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);    
// Commit the transaction
transaction.commit();

哟可以使用片段事务,在一个活动中替换它们,我认为你使用相同的方式,

我认为你没有错,使用片段而不是使用不同的活动没有问题。

但是您应该考虑一下,您真的需要在一项活动中使用它们吗?如果您不需要在一项活动中显示它们,则不需要使用片段。

片段必须始终嵌入到活动中,并且片段的生命周期直接受到宿主活动生命周期的影响。比如当activity暂停时,里面的所有fragment都会暂停,当activity销毁时,所有fragment也会暂停。然而,当一个活动正在运行时(它处于恢复的生命周期状态),您可以独立地操作每个片段,例如添加或删除它们。当您执行这样的片段事务时,您还可以将其添加到由 Activity 管理的回退堆栈中 - 活动中的每个回退堆栈条目都是发生的片段事务的记录。后退堆栈允许用户通过按下后退按钮来撤销片段事务(向后导航)。

结果,这并没有错,但我认为如果您不需要,创建不同的活动很容易维护。

在此处输入图像描述

于 2013-03-25T10:06:23.963 回答