2013-06-24 69 views
3

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

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

回答

1

你可以使用下面的库来做你想做的和更多的事情。它来自Square Inc.,它很棒。由于它的描述说,“奥托是一个事件总线设计,沟通有效地分离应用程序的不同部分,同时仍然允许他们。

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

如果你不想使用它,你可以轻松使用​​。您可以从一个Activity发送广播,并使用BroadcastReceiver从另一个广播中接收广播,并相应地更新用户界面。您也可以在广播中使用Intents发送数据,以便您可以从其他Activity了解您想要更改的内容。

+0

请至少包括该库对该链接的目标所做的总结性描述。 –

1

您可以使用startActivityForResult开始活动B,并且在用户完成编辑选项后,您可以返回到A并使用Intent将其发送回您的数据。

编辑: 你也可以使用一个singleton使用时,单例存储一些值,并在所有的活动对它们的访问,但请注意,你可以做内存泄漏..

+0

通过putExtra的意图,对吧? –

+0

是的,那应该是该方法:) .. – Cata

1

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

1

案例1:要在开始从A发送一些数据B

。只需使用Intent.putExtra即可传递数据。从B识别数据和做事

案例2:你想要做一些任务AB完成

。刚开始B使用startActivityForResultAB完成onActivityResult将被调用。

情况下3:

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

1

您似乎对Activities是什么以及它们是如何工作有些误解。该活动是您的应用程序的“孤立”部分,通常包含当前窗口及其内容。以这种方式使用的每个活动都会跟踪其自己的数据,并使用IntentsBroadcasts与其他活动进行交互。如您所述,活动还可以访问SharedPreferences中的共享数据,但也可以访问文件或Application(或单件)中的共享数据。您不能在另一个Activity中调用非静态方法,因为不能保证该Activity在当前存在。

如果你想要做的是保持两个“活动”同时活动并且经常互相交流,你应该切换到Fragment s。您可以在一个Activity中拥有多个Fragments,并且可以更自由地交互(首选方法是通过Activity进行通信)。

相关问题