【问题标题】:Need a suitable Android pattern需要合适的 Android 模式
【发布时间】:2011-04-28 19:29:04
【问题描述】:

我正在开发一个 Android 应用程序并且面临重构问题;我的大部分活动都需要某些通知功能,即显示 Toast 消息。这是由扩展 Activity 的超类处理的

活动

-NotificationActivity

--我的活动A

--我的活动B

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

活动

-MyNotificationActivity

--我的活动A

--我的活动B

--MySpinnerActivity(设置Spinner和Cursor)

---MySpinnerActivityA

---MySpinnerActivityB

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

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

干杯, 巴里

【问题讨论】:

  • 只是想 - 我可以尝试让我的超类 NotificationActivity 扩展 ListActivity 而不是 Activity。虽然不是很“好”,因为我的其他活动都不需要清单。

标签: java android design-patterns hierarchy superclass


【解决方案1】:

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

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

在您的情况下,也许您可​​以编写某种封装通用功能的“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");
    }

}

【讨论】:

  • 谢谢 cephron,我试试看。
猜你喜欢
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多