【问题标题】:Loading multiple fragments from one activity in Android从 Android 中的一个活动加载多个片段
【发布时间】:2015-06-03 07:41:02
【问题描述】:

我有一个疑问,想澄清一些关于 Activity 持有多个片段的问题。

我有 10 个片段与一个 Activity (HomeActivity.java) 相连;此活动包含一个导航抽屉和工具栏,其中包含多个图标,如搜索、添加、删除、后退按钮等。

我所遵循的结构如下,

用户点击导航抽屉中的任何项目,我正在加载片段,

fragmentManager.beginTransaction().replace(R.id.fragment_container, fragmentToLoad, tagFragment).addToBackStack(tagFragment).commit();

fragmentToLoad -> 片段名称,tagFragment -> 标记该特定片段。

我正在根据 HomeActivity 本身的片段更改标题名称、工具栏。

我的导航抽屉项目只有一个片段,并在 fragment_container 中被替换,但还有一件事,这些片段也有内部子片段。

一开始,我说过有 10 个片段,那 10 个片段是导航抽屉项。有很多内在的碎片。

现在,我在 HomeActivity.java 中使用接口(Listeners)维护内部片段的点击侦听器和其他活动。

所以,有时我会收到警告“主线程有很多工作要做”。

我知道 HomeActivity.java 上有很多活动。

请告诉我这个架构是错误的或者有什么解决办法。

【问题讨论】:

  • 你可以使用这样的片段......但一般不推荐,因为你最终会得到一个非常臃肿的“超级活动”。最初,片段更多地是帮助平板电脑开发的解决方案——以避免重写或复制大量代码来制作平板电脑布局。考虑根据用例将您的片段分成活动。
  • 您应该考虑从片段转移到自定义视图。我不知道您收到的警告是否与您的应用程序架构有关,但过度使用片段肯定无济于事。 corner.squareup.com/2014/10/…
  • 另外,如果您有时间,请查看 Google IO 2014 iosched 源代码 - github.com/google/iosched。这是如何组织安卓应用的一个很好的例子。

标签: android android-fragments navigation-drawer


【解决方案1】:

我不会说您的架构是错误的。相反,我会说,通过使用单个中心活动来处理如此多的片段,您将自己维护和调试该活动变得非常困难。

就警告消息而言,它取决于跳过的帧数(在日志中“主线程有很多工作”之前打印的内容)。我相信如果这个数字是〜100,那么它真的不应该是一个严重的问题。请通过this SO answer获取完整说明!希望有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多