如果您对片段/活动有一个简单的用例场景,那么您的解决方案是可行的。不要总是购买java纯粹主义者所说的 - 如果我们都这样做,没有人会做任何事。有时最好将约定抛到窗外,做最快最简单的事情 - 特别是如果它是一个小应用程序而有人付钱给你做。
使用记录的回调和推荐模式的原因是您将使用Android框架而不是反对它。使用静态方法完全绕过这个并且看起来很简单但是在两个级别上存在问题。
首先,从面向对象的设计角度来看,您紧密耦合具有非常不同且独立的职责的类,使得它们更难以重复使用和重构。您在片段和活动类中引入的静态方法越多,这个问题就会越严重。
其次,你在两种类型的对象的生命周期之外工作,这将给你带来很多痛苦。首先,片段会被Android一直摧毁并重新创建。例如,当您旋转设备并且显示从纵向模式更改为横向模式时,所有片段都会被销毁并再次创建 - 因为在横向中您可能使用不同的片段或在相同的片段中呈现不同的内容。当用户导航到新活动或不同应用程序时,也可以暂停片段和活动。
在片段和活动上创建静态方法,您可以随时调用这些方法,并且当您这样做时,您不知道片段或活动是否可见。如果它是当前活动的一部分,你不知道它的生命周期的哪个阶段,因此你要么要编写大量额外的代码来处理这个问题,要么根本不编写任何代码(并且非常有用)越野车应用)。
使用回调还意味着在多片段活动中,您可以更轻松地确保替代片段可以用于替代布局,并且已决定使用哪个片段的父Activity可以确保来自兄弟片段的数据被路由到正确的片段。
下载最新的Android工具(SDK r20,撰写本文时的工具r14)并创建一个新的Android应用程序项目( New > Other > Android Application Project )使用Eclipse IDE。在“创建活动”步骤中,选择一个 MasterDetailFlow 基础项目。在编写一行代码之前,这将实例化一个具有两个片段(一个ListFragment和一个详细视图)的应用程序,该片段开箱即用。您可以检查他们如何通过主Activity进行通信。
New > Other > Android Application Project
MasterDetailFlow
使用明确指定的通信接口比假设有一个更好。因此,如果你定义 interface 为了您的沟通,那么:
interface
Fragment
Activity
您可能还想阅读 这篇Android SDK文章 。