java - 多 Activity 中用 EventBus 替换 LiveData

标签 java android android-architecture-components android-livedata greenrobot-eventbus

目前我的项目使用 EventBus 来发布事件,我正在尝试用 EventBus 替换 LiveData。理论上,它们的工作原理相似。一开始我没有痛苦地迁移。但它出现了一个我不知道如何处理的场景。

这是场景。

LaunchActivity -> PersonInfoActivity -> UpdateInfoActivity

目前我们在LaunchActivity和PersonInfoActivity中使用EventBus订阅UserInfoEvent

启动 Activity .java

public class LaunchActivity{
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onEvent(UserInfoEvent event){

     }
}

PersonInfoActivity.java

public class PersonInfoActivity{
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onEvent(UserInfoEvent event){

     }
}

UpdateInfoActivity.java

public class UpdateInfoActivity{
     public void onSubmit(){
          EventBus.getDefault().post(new UserInfoEvent());
     }
}

问题是,我想用LiveData来代替这个场景

我做了什么?

我已经阅读了关于单例使用 livedata 的问题 Room - LiveData observer does not trigger when database is updated ,我想尝试使用相同的方式但没有运气。当我启动 Activity 时,每次在 onChanged() 中触发事件

最佳答案

您可以使用 viewModel 实现来实现它。喜欢,

public class UserViewModel extends AndroidViewModel {
private UserRepository userRepository;
private LiveData<List<UserData>> getUser;

public UserViewModel(@NonNull Application application) {
    super(application);
    userRepository = new UserRepository(application);
    getUser= userRepository.getUser();
}


public LiveData<List<UserData>> getUser() {
    return getUser;
}
}

创建此类后,像这样更新您的 PersonalInfoActivity 和 LaunchActivity,

private UserViewModel userViewModel;

    userViewModel.getUser().observe(this, new Observer<List<UserData>>() {
    @Override
public void onChanged(@Nullable final List<UserData> user) {
//write code to set data of user to show using list of user
}
});

如果您对此有任何疑问,请留下commnet。

关于java - 多 Activity 中用 EventBus 替换 LiveData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51224916/

相关文章:

Android:收到新通知时如何打开屏幕?

android - 来自 Architecture Components 的 @OnLifecycleEvent 注释方法如何与 LifecycleOwner 联系起来?

java - 一种在运行时查找另一个对象(其中包含列表)的所有子对象的方法

java - 为什么我的 R 文件丢失?在一个全新的项目上。

android - 检查 Wifi 时出现 java.lang.Securityexception

android-architecture-components - 在导航组件的起始目标位置时如何处理后退按钮

android - 新的分页库也可以与 Firebase 一起使用?

java - 如何使用 Maven 创建一个可运行的 jar,它在一个单独的 "lib"文件夹中包含依赖项(不是 uber jar)

java - 如何处理第 3 方 Javadoc

java - 方法具有(意外地)与另一个方法相同的删除