我在我的应用程序中使用MutableLiveData进行基于事件的通信。我有单一活动两个片段架构。
在ViewModel的帮助下,我正在使用Fragment-1中的LiveData事件。但是,当我使用菜单栏用Fragment-2替换这个Fragment-1并最终返回Fragment-1时,LiveData的旧值再次被捕获。
如何避免这个问题?非常感谢任何帮助/建议!谢谢你。
接受答案的问题是,你只能有一个观察者。这篇文章描述了具有多个观察者的解决方案。
无论您在哪里观察liveData,在onChanged
方法中,通过调用myLiveDataObject来移除观察者。移除观察者(这个)
这将在观察到第一次数据后移除观察者。
您可以使用Event
包装LiveData
值,以处理消费其值的操作,如下文所示:https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150
事件类是这样的:
open class Event<out T>(private val content: T) {
var hasBeenHandled = false
private set // Allow external read but not write
/**
* Returns the content and prevents its use again.
*/
fun getContentIfNotHandled(): T? {
return if (hasBeenHandled) {
null
} else {
hasBeenHandled = true
content
}
}
/**
* Returns the content, even if it's already been handled.
*/
fun peekContent(): T = content
}
让我们说你的LiveData值是一个字符串,那么单个事件的LiveData就像:
val navigateToDetails=MutableLiveData
我对TextWatcher有一个恼人的问题。我一直在网上搜索,但什么也找不到。如果有人能帮助我,我将不胜感激。 由于某些原因,在一次文本更改时对TextWatcher事件的调用是不稳定的。有时它们被触发一次(就像它们应该被触发的那样),有时两次,有时三次。不知道为什么,整个事情都很直截了当。有时,PostTextChanged()上的可编辑参数在toString()和length()中返回空值。
当切换回第一个选项卡时,我需要不要再次返回数据!我做错了什么?你能帮帮我吗? 附言。对于导航,我使用navigation-advanced-sample中的sample,在切换选项卡后,不调用。 文章中的第一个解决方案是在片段中观察ViewModel中的LiveData: 一个合适的解决方案是使用getViewLifeCycleOwner()作为LifeCycleOwer,同时观察onActivi
第一次调用时,激发一次 第二次调用时,会激发两次 等等 编辑: 下面是一个jsfiddle示例(如下所示)。 要复制,请单击按钮,然后单击,然后单击一个并重复此过程 您将注意到,第二次执行该过程时,文本会加倍
场景:我有两个片段,分别名为和。我从转到选择一个单元,使用
我有一个,它有一个字段,如下所示 我还有几个,它们是继承的的部分。 在其中一个如果这些片断中,我将在片断的方法中进行另一个调用,如下所示 当第一次创建片段时,只调用一次,但片段会转到后台,然后返回,它会被多次调用,这会引起问题。 如有任何帮助,我们将不胜感激。
问题内容: 我试图用Javascript编写视频扑克游戏,以降低其基础知识,但是我遇到了一个问题,其中jQuery click事件处理程序多次触发。 它们被附加到用于下注的按钮上,并且对于在游戏过程中第一手下注(仅触发一次)非常有效。但是在秒针下注中,每次按下一个下注或下注按钮都会触发两次点击事件(因此,每次按下正确的赌注量是两次)。总体而言,在按一次下注按钮时,触发单击事件的次数遵循此模式序列的