gpt4 book ai didi

android-fragments - 其他 Activity 中的 OTTO 和 Fragments

转载 作者:行者123 更新时间:2023-12-04 07:43:25 29 4
gpt4 key购买 nike

我昨天开始使用 OTTO by Square,到目前为止我有一个好的开始。

当您的 Fragment 已经托管在 FragmentActivity 中并且您只需要在该 FragmentActivity 托管的 Fragment 之间进行通信时,Otto 开箱即用的效果很好。

当已经托管时,您的 #onResume() Methode 会被调用,并且 Fragment 可以在 Eventbus 上注册自己:

@Override
public void onResume()
{
super.onResume();
BusProvider.getInstance().register(this);
}

我的问题:

嵌入在 中的片段额外 应该通过 Eventbus 接收事件的 Activity 如下所示:
public AnotherFragmentHostedInSomeActivity extends Fragment
{
.....

@Subscribe
public void onSomethingHappend(final Event event)
{

final SomeObject deliveredObject = event.getSomeObject();

但是,当您想调用 时,事情似乎仍然很复杂。另一个 Activity 在那里托管这样的代码片段:
public class SomeFragmentSendingDataToAnotherFragment extends Fragment
{
...
private void sendData()
{
final Intent intent = new Intent(applicationContext, SomeActivity.class);
applicationContext.startActivity(intent);
BusProvider.getInstance().post(new Event(someObject));

正如您可能已经看到的那样,这段代码很狡猾。由于生命周期,启动 Activity 然后将数据发送到该 Activity 托管的 Fragment 无法正常工作。因此, Activity 被创建,片段也被创建。有时会调用 onResume Methode,以便 Fragment 可以使用 @Subscribe 注册自己。但这一切都发生了 之后 该事件已通过 EventBus 发布。因此,感兴趣的片段永远不会被 EventBus 调用。

任何人都知道如何以聪明的方式做到这一点?

那里有一些额外的信息:
昨天我和 OTTO 玩得很开心。只有当我需要将数据发送到另一个 Activity 时,问题才会出现在我的项目中,在我的情况下,这种情况总是发生在应用程序在智能手机上运行时,而不是平板电脑上。在我通过 Intent 和 Parcelable 发送所有数据之前。 Otto 会减少编写 Parcleable Objects 的需要,所以我想这样做。

感谢您的回答

最佳答案

当第二个 Activity 开始时,你原来的 Activity 已经消失了。正如其他人所指出的,如果你想将数据从 Activity 传递到 Activity,使用 Intents 可能是最好的途径。

如果你真的想要一个事件总线,你需要一个即使在第一个 Activity 消失后仍然保持 Activity 状态的对象。在 Android 中,这与应用程序上下文相关,或者如果使用 Dagger 或 Guice,则为 @Singleton。

这个单例是使用 Otto 的 @Produce 注释的地方。当第二个 Activity 订阅总线时,它将接收来自该 @Produce 方法的任何数据。

关于android-fragments - 其他 Activity 中的 OTTO 和 Fragments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13267975/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com