我有两个活动。第一个有一些布局,第二个有开关/切换。我想要做的是当我从第二个活动更改切换以隐藏第一个活动中的布局时。 现在,我知道我可以使用SharedPreferences,但我发现很难相信我不能从另一个活动中引用一些东西。 例如:如何从活动B中的活动A调用方法? 我怎样才能在活动B中修改活动A的textView?比如,按活动B中的按钮直接更改活动A中的textView,而不是通过SharedPreferences或类似的任何内容。 有没有办法引用它? 我可能需要这样做,我不敢相信这是不可能的。
提前致谢,祝你有愉快的一天!
答案 0 :(得分:1)
您可以使用以下库来执行您想要执行的操作以及更多操作。它来自Square Inc.,很棒。正如它的描述所说:“Otto是一种事件总线,旨在将应用程序的不同部分分离,同时仍然允许它们有效地进行通信。”
如果您不想使用它,可以轻松使用Broadcasts
。您可以从Activity
发送广播,并使用BroadcastReceiver
从另一个广播中捕获广播,并相应地更新UI。您还可以在广播中使用Intents发送数据,以便您可以从另一个Activity
了解您想要更改的内容。
答案 1 :(得分:1)
您可以使用startActivityForResult启动活动B,在用户完成编辑选项后,您可以返回A并使用Intent
将数据发回给我。
修改强>
您还可以使用singleton
存储一些值并在所有活动中访问它们,但在使用单例时请注意,因为您可能会发生内存泄漏..
答案 2 :(得分:1)
绝对有可能使用BroadcastReceiver。在第一个活动中注册BroadcastReceiver,以监听要发送给它的各种广播以更新它的UI,并在第二个活动中按下按钮时发送这些广播。您可以使用捆绑包通过广播发送数据。
答案 3 :(得分:1)
案例1:
您希望在开始时将A
的一些数据发送到B
。只需使用Intent.putExtra
传递数据即可。从B
识别数据并执行操作
案例2:
当A
完成时,您希望在B
中执行某些任务。只需使用B
从startActivityForResult
开始A
,当B
完成后,onActivityResult
将被调用。
案例3:
您希望在两个正在运行的活动之间传递信息(或命令调用方法)。您可以使用BroadcastMessage
(或LocalBroadCastMessage
)向其他活动发送广播。按照指示阅读消息
答案 4 :(得分:1)
您似乎对Activities
是什么以及它们如何运作有轻微的误解。 Activity是Application的“隔离”部分,通常包含当前窗口及其内容。以这种方式使用的每个活动都会跟踪自己的数据,并使用Intents
或Broadcasts
与其他活动进行互动。如您所述,活动还可以访问SharedPreferences
的共享数据,还可以访问文件或Application
(或单个)。您不能在另一个Activity中调用非静态方法,因为无法保证当前存在该Activity。
如果你想要做的是让两个“活动”同时处于活动状态并经常互相交流,你应该切换到Fragment
。您可以在一个Activity中拥有多个Fragment,因此可以更自由地进行交互(首选方式是通过Activity进行通信)。