【发布时间】:2014-01-12 03:15:23
【问题描述】:
我有 A 类(扩展 Activity),它显示表格中的项目列表。
在 B 类(扩展活动)中,我正在调用一个最终触发 C 类(C 扩展广播接收器)的方法。
在我的 C 类中,我正在更新我的数据库中的一个表,A 类在其中获取要呈现的项目。
我的问题是如何在 C 类完成更新表后调用 A 类方法。
在这种情况下,将 A 类函数设为静态是完全不可能的。
【问题讨论】:
我有 A 类(扩展 Activity),它显示表格中的项目列表。
在 B 类(扩展活动)中,我正在调用一个最终触发 C 类(C 扩展广播接收器)的方法。
在我的 C 类中,我正在更新我的数据库中的一个表,A 类在其中获取要呈现的项目。
我的问题是如何在 C 类完成更新表后调用 A 类方法。
在这种情况下,将 A 类函数设为静态是完全不可能的。
【问题讨论】:
如果类 C 扩展 BroadcastReceiver 并且它负责更新您的数据库,一旦您更新,您可以发送一个新的 Broadcast 让您的应用程序的其他部分知道表更新已完成。您需要在您想要收到通知的地方(即在您的 A Activity 类中)注册一个接收器。如果您只需要在本地广播(仅对您的应用程序),您可以使用 v4 支持库提供的新 LocalBroadcastManager。它只会在本地广播并摆脱 IPC 开销。
【讨论】:
Activity 通常不能调用其他 Activity 的方法。您需要找到一种不同的方式在这些类之间进行通信。例如,在一个活动中通过registerReceiver() 实例化一个动态接收器,并在另一个活动中发送广播。
除此之外,您的问题似乎表明您的应用程序架构不是最佳的。一次总是只有一个可见的活动。为什么你的活动需要相互交流?
【讨论】:
Activity 调用一个Activity 的方法。 C 类是BroadcastReceiver,而不是Activity。 B 触发 C,然后 C 必须让 A 知道它已经完成。