java - 需要合适的安卓模式

标签 java android design-patterns hierarchy superclass

我正在开发一个 Android 应用程序,但遇到了重构问题;我的大部分 Activity 都需要某些通知功能,即显示 Toast 消息。这是由扩展 Activity 的父类(super class)处理的

Activity

-NotificationActivity

--MyActivityA

--MyActivityB

等等。然后我决定重构我的两个 Activity ,它们使用由数据库游标填充的 Spinner。层次结构现在看起来像这样:

Activity

-MyNotificationActivity

--MyActivityA

--MyActivityB

--MySpinnerActivity(设置微调器和光标)

---MySpinnerActivityA

---MySpinnerActivityB

我现在面临的问题是 - 我正在编写一个新的 Activity 类,它也将使用数据库 Cursor 但要填充 ListView。我想扩展 ListView 以利用内置的 Android 列表管理,但我还需要访问 Cursor 设置方法和 Notification 方法,它们已经存在于我的类层次结构中。

我真的很想避免代码重复。有什么建议吗?

干杯, 巴里

最佳答案

在处理类似问题(一堆显示 ProgressDialogs 的 Activity )时,我避免扩展具有 ProgressDialog 功能的父类(super class)。

相反,我编写了一个单独的类“LoadingDialog”来处理它。在每个需要此功能的 Activity 中,它都有一个类 LoadingDialog 的实例作为字段。而且,对于任何依赖于上下文或 Activity 的功能, Activity 可以传递对自身的引用,或根据需要公开自身的其他部分。

在您的情况下,也许您可​​以编写某种封装通用功能的“ToasterFunctionClass”,并在每个适当的 Activity 中都有一个实例。

public class ListStuff extends ListActivity {

    private ToastFunctionClass toaster = new ToastFunctionClass(this); //pass yourself so that toaster has a Context in which to do UI stuff.

    onSomethingHappened() {
        toaster.showToast("Something happened");
    }

}

关于java - 需要合适的安卓模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5823915/

相关文章:

android - 自定义操作栏删除 Logo 的左边距

java - Android 的翻转板菜单样式

java - 如何与共同的父实例跨多个实例共享数据?

design-patterns - 为什么在构建器模式中类成员是重复的?

java - SonarLint 插件在 Eclipse Oxygen 中不起作用

java - 如何从小程序中的另一个方法调用重绘?

java - 为什么在调用 onItemClick() 时会针对 ListVIew 中显示的每一行再次调用 getView()?

design-patterns - 工厂方法的命名约定是什么?

java - 组合与减少耦合?

java - 在原子变量上使用 volatile