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

问题描述 投票:2回答:2

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

android mvvm android-livedata
2个回答
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,否则使用它不会触发对话两次。

希望能帮助到你。


0
投票

设置一个boolean isShown = false;

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

© www.soinside.com 2019 - 2024. All rights reserved.