android - EventBus 不在新 Activity 上注册事件

标签 android otto greenrobot-eventbus

我已经实现了一个 otto 总线示例。它工作正常,但仅在我第二次访问该 Activity 时才有效。

例如,当我加载应用程序并点击 secret 消息按钮时,我被带到 Activity 中,但 toast 没有显示。然后我点击后退按钮返回到 MainActivity 并再次点击显示 secret 消息按钮,当我被带到 secret 消息 Activity 时,会显示 toast 。我意识到它第二次起作用了,因为我没有取消注册事件就造成了泄漏。

逻辑上有什么我遗漏的吗?

主要 Activity :

public class MainActivity extends AppCompatActivity {

    Button buttonSecretMessage;
    Intent intentToMessage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        intentToMessage = new Intent(MainActivity.this, SecretMessageActivity.class);

        buttonSecretMessage = (Button) findViewById(R.id.buttonSecretMessage);

        buttonSecretMessage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                EventBus.getInstance().post(new MakeMySecretMessageEvent());
                startActivity(intentToMessage);

            }
        });
    }
}

secret 消息 Activity :

public class SecretMessageActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_secret_message);

    }

    @Subscribe
    public void getMySecretMessage(MakeMySecretMessageEvent event){

        Toast.makeText(this, event.getMessage(), Toast.LENGTH_SHORT).show();

    }

    @Override
    protected void onStart(){
        super.onStart();

        EventBus.getInstance().register(this);

    }

    @Override
    protected void onStop() {
        super.onStop();

        //EventBus.getInstance().unregister(this);

    }
}

MakeMySecretMessageEvent:

public class MakeMySecretMessageEvent {

    public MakeMySecretMessageEvent() {

    }

    public String getMessage() {

        String message = "YOU ARE AWESOME!";

        return message;
    }

}

事件总线:

public final class EventBus extends Bus{
    private static final EventBus Bus = new EventBus();

    public static Bus getInstance() {
        return Bus;
    }

    private EventBus() {
    }

}

最佳答案

您可以使用 EventBus 库发送粘性事件。它允许您将事件发送到尚未创建的组件。

您会找到更多信息 here .

关于android - EventBus 不在新 Activity 上注册事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35847289/

相关文章:

javascript - toExpontial 在 React Native 中未定义

java - GreenRobot 和 Guava 的 EventBus 使用反射吗?

android - 子 fragment 之间的动态数据交换

java - 使用 Otto 进行线程间通信 : Can it cause any problems?

android - EventBus Producer 已经失效,不能再生产事件

android - 如何将音频从 Firebase 加载到应用程序?

java - android.view.InflateException : Binary XML file line #22: Error inflating class ImageView

java - Android 解析无法将子类列表固定到缓存

java - 最近一直在看很多第三方库代码,看到这段代码让我很困惑

android - EventBus 发送空类