代码之家  ›  专栏  ›  技术社区  ›  F. Davis

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

  •  4
  • F. Davis  · 技术社区  · 6 年前

    我想使用实时数据显示带有消息的警报。我遇到的问题是,每当活动恢复时,就会再次弹出警报。有什么提示吗?

    2 回复  |  直到 6 年前
        1
  •  5
  •   Natan    6 年前

    您可以使用仅触发一次的自定义实时事件。此讨论已在上进行 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
  •  0
  •   Ege Kuzubasioglu Paresh P.    6 年前

    设置a boolean isShown = false;

    显示对话框时,将其设置为true并将其保存到共享首选项。仅显示对话框isShown为false。