EventBus发布无法更新工具栏标题.任何解决方法?

Ely*_*lye 4 android android-activity greenrobot-eventbus

我使用EventBus(GreenRobot)从backgroundThread发布到我的活动(这是一个UiThread).我可以开始片段等.我也想更新我的标题,所以我做了如下.(调用Activity setTitle())

@Subscribe
public void onEvent(AuthenticationEvent event) {
    setTitle(event.getTitle());
}
Run Code Online (Sandbox Code Playgroud)

但是,如下所示,存在错误.(应用程序没有崩溃,但错误清楚地显示在日志中,并且工具栏标题在此之后表现得很奇怪).

E/EventBus: Could not dispatch event: class package.AuthenticationEvent to subscribing class class package.MainActivity
      android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6357)
Run Code Online (Sandbox Code Playgroud)

有没有办法解决它,EventBus的帖子仍然允许我更新我的Ui(例如标题)?

Cha*_*hai 15

您只能从UI线程更新任何UI组件.如果您尝试从后台线程更新UI,它将无法工作,并可能导致应用程序崩溃.

默认情况下,@Subscribe方法将在发布线程中执行,这是您的后台线程.这就是你的代码不起作用的原因.要使其工作,必须使用@Subscribe(threadMode = ThreadMode.MAIN)它以便在UI线程中执行.对于您的特定代码:

// Called in Android UI's main thread
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(AuthenticationEvent event) {
    setTitle(event.getTitle());
}
Run Code Online (Sandbox Code Playgroud)