Android库项目 - 定义类

8

嘿!(对于这篇长帖子,我表示歉意)

我正在编写几个应用程序,它们将基于基本相同的代码。

每个应用程序都会有所不同,一些将拥有新的活动,所有应用程序都将分配不同的资源。

我试图使用Android库项目,以便我可以将所有公共代码放在一个地方,因此只需进行一次主要更改即可更新所有项目。

现在,资源是一种简单的解决方案,因为我可以在主应用程序中定义每个资源,并且只要命名约定保持相同,这些资源就会覆盖库项目中的资源。

现在,我的问题是如何为类做到同样的事情?例如,我将一个基本视图作为所有视图中通用代码的包装器。在此基础上,我启动各种活动。如果所有三个应用程序都需要启动不同的活动,因为它们将包含不同的UI和功能,该怎么办?我该如何解决这个问题?库项目将永远不会知道主项目想要使用不同的活动,因为它已经被编译了。

我想出了一些解决方案,但我想知道是否还有其他人有一些想法?任何反馈都将非常有帮助:

  1. 要启动的库项目中的活动存储要加载的类的引用,该类将在其启动时在主应用程序中定义。这样,当库项目调用此活动时,它可以加载已经被告知的内容。

  2. 我将所有不会更改的功能留在库项目的活动中。然后我扩展此活动,并覆盖onCreate以在此处执行所需操作(例如加载不同的布局,设置视图等)。现在,这有一个缺点,因为我必须在我的主应用程序中而不是在库项目中定义大多数入口点。

我希望你能理解我的问题。如果我解释得不好,请问一下。

谢谢,

亚当


我认为我可能已经找到了一个解决方案。使用反射和意图的setClassName方法,库项目不需要将类实例可用。主应用程序现在可以定义这些类,并且库项目将能够调用它们。目前看来似乎运行良好! - Mimminito
2
我遇到了同样的问题。你能否提供你的反射代码,因为我认为它也可以解决我的问题。 - Tony Chan
1个回答

0

或者更简单地说:您应该使用继承还是组合来实现这种灵活性?

我也有过这种结构问题。通常,您可以通过重用适用的模式并将必要的代码部分分成较小的片段来解决它。即,如果您知道差异是视图,则将其提取到一些专门的类中,这些类将针对公共接口实现,并在基础活动中引用该接口。

以下是一些链接:

至少从我理解您的问题的方式来看,这更像是一个面向对象的设计问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接