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

Android 使用实时数据,如何只显示一次对话框?,android,mvvm,android-livedata,Android,Mvvm,Android Livedata,我想使用实时数据显示带有消息的警报。我遇到的问题是,每当活动恢复时,警报就会再次弹出。有什么提示吗?您可以使用只触发一次的自定义实时事件。这一讨论已经在星期四进行了。这里有一个我喜欢的 如果您在kotlin需要它,它就会出现: class SingleLiveEvent<T>: MutableLiveData<T>() { private val pending = AtomicBoolean(false) @MainThread overri

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

您可以使用只触发一次的自定义实时事件。这一讨论已经在星期四进行了。这里有一个我喜欢的

如果您在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"
    }
}
class SingleLiveEvent:MutableLiveData(){
private val pending=AtomicBoolean(false)
@主线
覆盖乐趣观察(所有者:生命周期所有者,观察者:观察者){
if(hasActiveObservers()){
w(标签,“注册了多个观察者,但只有一个会收到更改通知。”)
}
//观察内部的可变LiveData
超级观察者(所有者、观察者{t->
if(挂起的比较数据集(真、假)){
观察员:一旦改变(t)
}
})
}
@主线
覆盖设置值(@Nullable t:t?){
挂起。设置(true)
超级设定值(t)
}
/**
*用于T为空的情况,使呼叫更干净。
*/
@主线
趣味电话(){
值=空
}
伴星{
private val TAG=“SingleLiveEvent”
}
}
使用它不会触发对话框两次,除非您再次调用
yourLiveData.value=newValue


希望有帮助。

设置一个
布尔值isShown=false


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

谢谢,我会试试。效果很好。非常感谢你!这个答案及其链接非常有用