Java 需要一个合适的Android模式吗

Java 需要一个合适的Android模式吗,java,android,design-patterns,hierarchy,superclass,Java,Android,Design Patterns,Hierarchy,Superclass,我正在开发一个Android应用程序,面临一个重构问题;我的大多数活动都需要特定的通知功能,即显示祝酒词。这由扩展活动的超类处理 活动 -通知活动 --我的活动a --MyActivityB 等等。然后,我决定重构我的两个活动,它们利用一个由数据库游标填充的微调器。层次结构现在如下所示: 活动 -我的通知活动 --我的活动a --MyActivityB --MySpinnerActivity(设置微调器和光标) ---MySpinnerActivityA ---MySpinnerActivity

我正在开发一个Android应用程序,面临一个重构问题;我的大多数活动都需要特定的通知功能,即显示祝酒词。这由扩展活动的超类处理

活动

-通知活动

--我的活动a

--MyActivityB

等等。然后,我决定重构我的两个活动,它们利用一个由数据库游标填充的微调器。层次结构现在如下所示:

活动

-我的通知活动

--我的活动a

--MyActivityB

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

---MySpinnerActivityA

---MySpinnerActivityB

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

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

干杯,
Barry

在处理类似的问题(一系列显示ProgressDialogs的活动)时,我避免使用ProgressDialog功能扩展超类

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

在您的例子中,也许您可以编写某种“ToasterFunctionClass”,它封装了公共功能,并在每个适当的活动中都有一个实例

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");
    }

}

在处理类似的问题(一系列显示ProgressDialog的活动)时,我避免使用ProgressDialog功能扩展超类

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

在您的例子中,也许您可以编写某种“ToasterFunctionClass”,它封装了公共功能,并在每个适当的活动中都有一个实例

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");
    }

}

我只是想-我可以尝试让我的超类NotificationActivity扩展ListActivity而不是Activity。虽然不是很“好”,因为我的其他活动都不需要列表内容。只是想-我可以尝试让我的超类NotificationActivity扩展ListActivity而不是Activity。虽然不是很好,因为我的其他活动都不需要列表。谢谢cephron,我来试试。谢谢cephron,我来试试。