我想使用实时数据显示带有消息的提醒。我遇到的问题是每当活动恢复时警报再次弹出。任何提示?
答案 0 :(得分:3)
您可以使用仅触发一次的自定义直播活动。这个讨论已经在Android's Architecture Google Samples Repository进行了。这是我喜欢的proposed solution。
如果你需要在kotlin中,那就是:
class SingleLiveEvent<T>: MutableLiveData<T>() {
private val pending = AtomicBoolean(false)
@MainThread
override fun observe(owner: LifecycleOwner, observer: Observer<T>) {
if (hasActiveObservers()) {
Log.w(TAG, "Multiple observers registered but only one will be notified of changes.")
}
// Observe the internal MutableLiveData
super.observe(owner, Observer<T> { t ->
if (pending.compareAndSet(true, false)) {
observer.onChanged(t)
}
})
}
@MainThread
override fun setValue(@Nullable t: T?) {
pending.set(true)
super.setValue(t)
}
/**
* Used for cases where T is Void, to make calls cleaner.
*/
@MainThread
fun call() {
value = null
}
companion object {
private val TAG = "SingleLiveEvent"
}
}
使用此功能,除非您再次致电yourLiveData.value = newValue
,否则不会两次触发对话框。
希望它有所帮助。
答案 1 :(得分:0)
设置boolean isShown = false;
当您显示对话框时,将其设置为true并将其保存到共享首选项。只显示对话框isShown为false。