【问题标题】:Am I using fragments right?我使用片段对吗?
【发布时间】:2013-03-25 09:48:21
【问题描述】:

我有点困惑,什么是思想上正确的片段使用方式。

正如 Android 开发者所说,

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

还有:

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

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

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

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

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

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

【问题讨论】:

  • 您可以在片段中访问 ActionBar,如下所示:ActionBar ab = getActivity().getActionBar() 保留在片段代码中为该特定片段更改 ActionBar 是有意义的。此外,如果您想从片段内部访问父活动,明智的做法是遵循谷歌建议并为此使用界面。在这里解释得很好:developer.android.com/training/basics/fragments/…

标签: android android-fragments


【解决方案1】:

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

但是 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();

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

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

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

片段必须始终嵌入到活动中,并且片段的 生命周期直接受宿主活动生命周期的影响。为了 例如,当活动暂停时,其中的所有片段也是如此,并且 当活动被破坏时,所有片段也被破坏。然而,虽然 一个活动正在运行(它处于恢复的生命周期状态),你可以 独立操作每个片段,例如添加或删除它们。 当你执行这样一个片段事务时,你也可以将它添加到一个 由活动管理的回栈——每个回栈条目 活动是发生的片段事务的记录。这 回栈允许用户撤销一个片段交易(导航 向后),按“后退”按钮。

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

【讨论】:

  • 我正在使用 SlidingMenu,当我从 SlidingMenu 中选择一个项目时,我不想弹出新的 Activity,我希望关闭菜单并显示新内容而不是旧内容。它看起来更自然
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 2013-01-01
相关资源
最近更新 更多