3

我有两个活动。第一个有一些布局,第二个有一个开关/切换。我想要做的是当我从第二个活动更改切换以隐藏第一个活动中的布局时。现在,我知道我可以使用 SharedPreferences,但我很难相信我不能从一项活动中引用另一项活动的内容。例如:我如何在活动 B 中调用活动 A 的方法?我如何喜欢从活动 B 中的活动 A 修改 textView?就像,按下活动 B 中的按钮直接更改活动 A 中的文本视图,而不是通过 SharedPreferences 或类似的东西。没有办法参考吗?我可能需要这样做,我不敢相信这是不可能的。

在此先感谢,祝您有美好的一天!

4

5 回答 5

1

您可以使用以下库来做您想做的事情等等。它来自 Square Inc.,非常棒。正如它的描述所说,“Otto 是一种事件总线,旨在解耦应用程序的不同部分,同时仍然允许它们有效地通信。

http://square.github.io/otto/

如果您不想使用它,您可以轻松使用Broadcasts. 您可以从一个发送广播Activity并从另一个捕获广播BroadcastReceiver并相应地更新 UI。您还可以在广播中使用 Intents 发送数据,这样您就可以从其他Activity人那里了解您想要更改的确切内容。

于 2013-06-24T16:53:49.873 回答
1

您可以使用startActivityForResult启动活动 B,在用户完成编辑选项后,您可以返回到 A 并使用Intent.

编辑: 您也可以使用 asingleton来存储一些值并在您的所有活动中访问它们,但是在使用单例时请注意,因为您可能会发生内存泄漏..

于 2013-06-24T16:54:03.747 回答
1

情况1:

你想从一开始发送一些A数据B。只是Intent.putExtra用来传递数据。从B认识数据做事

案例2:

你想在完成后做一些A任务B。只需开始B使用startActivityForResultFrom AB完成onActivityResult后将被调用。

案例3:

您想在两个正在运行的活动之间传递信息(或命令调用方法)。您可以使用BroadcastMessage(或LocalBroadCastMessage)将广播发送到其他活动。按照指示阅读消息

于 2013-06-24T16:57:10.837 回答
1

使用BroadcastReceiver绝对是可能的。在第一个活动中注册一个 BroadcastReceiver 以侦听您想要发送给它的各种广播以更新它的 UI 并在您按下第二个活动中的按钮时发送这些广播。您可以使用 bundle 通过广播发送数据。

于 2013-06-24T16:54:06.223 回答
1

您似乎对它们是什么Activities以及它们如何工作有轻微的误解。Activity 是应用程序的“隔离”部分,通常包含当前窗口及其内容。以这种方式使用的每个 Activity 都跟踪自己的数据,并使用Intentsor与其他 Activity 交互BroadcastsSharedPreferences正如您所提到的,活动还可以从文件或Application(或单例)访问共享数据。您不能在另一个 Activity 中调用非静态方法,因为不能保证该 Activity 在当前时刻存在。

如果您想做的是同时保持两个“活动”处于活动状态并经常相互交互,那么您可能应该切换到Fragments。您可以在一个 Activity 中拥有多个 Fragment,从而可以更自由地进行交互(首选方式是通过 Activity 进行通信)。

于 2013-06-24T17:02:59.963 回答