目前我的项目使用EventBus发布事件,我正在尝试用EventBus替换LiveData。理论上,它们的工作原理类似。我一开始迁移时没有任何痛苦。但出现了一种情况,我不知道如何应对。
这是一个场景。
发射活动-
目前我们使用EventBus在Launchactive和人鱼信息活动中订阅用户信息事件
启动ctivity.java
public class LaunchActivity{
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(UserInfoEvent event){
}
}
人物信息ctivity.java
public class PersonInfoActivity{
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(UserInfoEvent event){
}
}
更新信息活动。JAVA
public class UpdateInfoActivity{
public void onSubmit(){
EventBus.getDefault().post(new UserInfoEvent());
}
}
问题是,我想用LiveData来代替这个场景
我做了什么?
我读过关于livedata Room使用单例的问题-数据库更新时LiveData观察者不触发,我想尝试使用相同的方式,但没有运气。当我开始活动时,事件每次都在onChanged()
中触发
我根据教程创建了一个名为LivedataBus的库。你可以这样使用它:
//Subscribe
LiveDataBus.subscribe("event_name", this, Observer {
it.runAndConsume {
Toast.makeText(this, "Hello ${it.value}", Toast.LENGTH_LONG).show()
}
})
//Publish
val obj = SomeEvent()
LiveDataBus.publish("event_name", ConsumableEvent(value = obj))
神奇的是,我使用了ConsumableEvent
,它可以在触发事件后使用,防止从静态总线获取最后的数据
我在当前的项目中使用它,并且它在多个活动中都能很好地工作
我认为有一些关于LiveData的误解。你可以在这里看看
这可能对你有帮助。您还可以通过LiveData事件总线和LiveData检查事件总线的实现
希望能有帮助!!!
你可以通过使用视图模型实现来实现它。比如,
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并启动活动,如,
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。
我真的不喜欢这样链接命令。有没有另一种方法在一个做?
由于不推荐使用TabActivity,我需要找到一种方法来使用片段。在我知道它如何工作之前,我已经使用了碎片,但我需要一个指南来创建我的标签主机与碎片活动。我在互联网上找到了几个例子,它们都是关于将片段放入标签的容器中的。
问题内容: 一个非常简单的小问题,但是我不太明白该怎么做。 我需要将’_’的每个实例替换为空格,并将’#’的每个实例替换为空/空。 我已经试过了: 我真的不喜欢这样的链接命令。还有另一种方法可以做到这一点吗? 问题答案: 使用OR运算符(): 您还可以使用字符类: Fiddle 如果您想用一件事替换哈希值,而用另一件事替换下划线,则只需要链接即可。但是,您可以添加一个原型: 但是为什么不连锁呢?我
我将我的< code>MainActivity类重命名为< code>DataActivity,并用IntelliJ IDEA添加了一个新的主活动类。我将< code>AndroidManifest.xml文件更改为以下内容: 我从手机中卸载了该应用程序并删除了编译器缓存。在安装时,我得到以下异常: 启动应用:com.example.DataTest/com.example.DataTest.Da
我正在搜索方法替换。它用于将值简单地传递给前一个片段,但问题是,我使用BackStackUtil进行导航,所以只有在返回前以某种方式清除堆栈时,才会在返回时调用方法 前一个片段包含项目列表,当下一个片段可以修改拾取的项目,而另一个片段可以做其他事情时,当这些事件中的每一个都传递给前一个片段时,这就是粘性事件链<应用程序结构不允许我在当前阶段应用协调器模式,而且我不想将包附加到保留在堆栈上的片段<我
我将在一个Android应用程序中用替换模式。我有事件来提醒任何感兴趣的方面我的缓存中的数据更新单例。任何时候调用web服务,都将更新数据,并通过发布的事件向订阅者发出警报。 我在RxJava中使用设置了与此类似的内容。观察者从subject获得单个事件,但随后获得事件并取消订阅。这在UI第一次加载时起作用,但当需要刷新数据时,不会通知订阅者。如何告诉这些继续监听下一个事件?