使用实时数据,如何只显示一次对话框?
Posted
技术标签:
【中文标题】使用实时数据,如何只显示一次对话框?【英文标题】:Using live data, how to display a dialog only once? 【发布时间】:2018-06-07 23:56:04 【问题描述】:我想使用实时数据显示带有消息的警报。我遇到的问题是,只要活动恢复,警报就会再次弹出。有什么提示吗?
【问题讨论】:
这个答案及其链接非常有帮助***.com/a/44178259/3643361 【参考方案1】:您可以使用仅触发一次的自定义实时事件。此讨论已在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
。
希望对你有帮助。
【讨论】:
谢谢,我试试看。 像魅力一样工作。非常感谢!【参考方案2】:设置boolean isShown = false;
当您显示对话框时,将其设置为 true 并将其保存到共享首选项。仅显示对话框 isShown 为假。
【讨论】:
以上是关于使用实时数据,如何只显示一次对话框?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET Core MVC 中请求和显示实时 Web api 数据?