使用实时数据,如何只显示一次对话框?

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 为假。

【讨论】:

以上是关于使用实时数据,如何只显示一次对话框?的主要内容,如果未能解决你的问题,请参考以下文章

如何只显示一次 Firebase 数据?

如何在 ASP.NET Core MVC 中请求和显示实时 Web api 数据?

如何在谷歌云存储中启用实时对象访问分析?

如何在 Windows 和 Web 应用程序上显示实时数据?

如何实时自动刷新数据,反应?

php是如何实现websocket实时消息推送的