라이브 데이터를 사용하여 메시지와 함께 경고를 표시하려고합니다. 내가 가지고있는 문제는 활동이 다시 시작될 때마다 경고가 다시 팝업됩니다. 어떤 힌트?라이브 데이터를 사용하여 대화 상자를 한 번만 표시하는 방법은 무엇입니까?
1
A
답변
0
한 번만 실행되는 맞춤 라이브 이벤트를 사용할 수 있습니다. 이 토론은 이미 Android's Architecture Google Samples Repository에서 일어났습니다. 여기 내가 좋아하는 proposed solution입니다. 경우
당신은 거기에 간다, 코 틀린에 필요한 : 다시 yourLiveData.value = newValue
를 호출하지 않는 한이 사용
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"
}
}
는이 두 번 당신에게 대화 상자를 트리거하지 않습니다.
희망이 있습니다.
0
설정합니다 boolean isShown = false;
당신은 대화가 true로 설정하고 공유 환경 설정에 저장 보여합니다. isShown이 false 인 경우에만 대화 상자를 표시하십시오.
감사합니다. 사용해 보겠습니다. –
매력처럼 작동합니다. 고마워요! –
@Natan 공유 참조 링크 또는 자습서 링크주세요 .. – Omi