目前我的项目使用 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/