2017-12-27 30 views

答えて

0

トリガーされるカスタムライブイベントは、1回のみ使用できます。この議論はすでに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を呼び出さない限り、それは二度あなたのダイアログをトリガしません。これを使用します。

希望します。あなたはダイアログがtrueに設定すると、共有設定に保存し表示すると

+0

ありがとう、私はそれを試してみます。 –

+0

魅力的な作品です。どうもありがとうございました! –

+0

@Natan共有参照リンクまたはチュートリアルリンクしてください.. – Omi

0

boolean isShown = false;

を設定します。 isShownはfalseです。

関連する問題