2017-12-27 48 views

답변

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

감사합니다. 사용해 보겠습니다. –

+0

매력처럼 작동합니다. 고마워요! –

+0

@Natan 공유 참조 링크 또는 자습서 링크주세요 .. – Omi

0

설정합니다 boolean isShown = false;

당신은 대화가 true로 설정하고 공유 환경 설정에 저장 보여합니다. isShown이 false 인 경우에만 대화 상자를 표시하십시오.