【问题标题】:Is the Official Fragment Developer Guide Contradicting itself?官方 Fragment 开发者指南是否自相矛盾?
【发布时间】:2013-03-10 08:04:24
【问题描述】:

official Fragment guideDesign Philosophy 部分中,它说:

您应该将每个片段设计为模块化且可重用的活动组件。也就是说,因为每个片段都通过自己的生命周期回调定义了自己的布局和自己的行为,所以您可以在多个活动中包含一个片段,因此您应该设计重用并避免直接从另一个片段操作一个片段.

但在其Example 中,TitlesFragment 类(扩展ListFragment)在其showDetails() 方法中直接引用DetailsFragment 类(扩展FragmentfindFragmentById()

DetailsFragment details = (DetailsFragment)
        getFragmentManager().findFragmentById(R.id.details);

并调用DetailsFragment 类的newInstance() 方法。

details = DetailsFragment.newInstance(index);

这是一种糟糕的编码风格吗?

相比之下,Basic Training Material 在编码风格上似乎做得更好。它使用一个接口进行 Fragment 到 Activity 的通信。

【问题讨论】:

  • 我怀疑这可能只是为了让示例保持简单和小巧而造成的。
  • 我也在考虑,第一行只是引用另一个Fragment 对象,并且它在下一行中正确地检查了null。对于第二个,它只是从类中调用一个静态方法。毫无疑问,基础培训材料中的方式更整洁,结构更合理。但是这两行是否已经意味着操纵另一个Fragment对象?

标签: android interface android-fragments


【解决方案1】:

这是一种糟糕的编码风格吗?

恕我直言,是的。恕我直言,一个片段既不应该知道也不应该关心活动管理的其他片段。片段可能关心嵌套片段(通过getChildFragmentManager() 的子片段),但不关心可能的对等片段。

在引用的示例中,TitlesFragment 不应该关心它是以单窗格还是双窗格模式显示。活动应该关心这一点。这会隔离活动中所有与屏幕大小相关的代码——TitlesFragment 可以忽略屏幕大小。

话虽如此,AFAIK 代码在技术上没有任何问题——这不是我推荐的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多