Cómo notificar a Observable cuando finalice CountdownTimer

Tengo un Android TextView personalizado que muestra la cantidad de time que queda en un juego a través de un CountDownTimer

class CountdownTextView(context: Context, attrs: AttributeSet) : TextView(context, attrs) { private lateinit var countDownTimer: CountDownTimer private lateinit var onFinishObservable: Observable<Unit> fun setTime(initTime: Int) { this.text = "$initTime:00" countDownTimer = object : CountDownTimer((initTime *1000).toLong(), 1000) { override fun onTick(millisUntilFinished: Long) { val minutes = millisUntilFinished / 60000 val seconds = (millisUntilFinished % 60000) / 1000 if (seconds / 10 > 0) { text = "$minutes:${(millisUntilFinished % 60000) / 1000}" } else { text = "$minutes:0${(millisUntilFinished % 60000) / 1000}" } } override fun onFinish() { } } fun startCountdown() { countDownTimer.start() } } 

¿Cómo configuro un observable que emite un valor cuando se llama al método countFieldTimer onFinish ()? Necesito esto para que en la actividad principal, pueda suscribirme a ese observable y realizar las acciones necesarias cuando expire el countdowntimer.

Podrías proporcionar un Sujeto .

 val onFinishObservable = CompletableSubject.create() override fun onFinish() { onFinishObservable.onComplete() } 

O puede usar Rx para el timer en lugar de CountDownTimer .

 fun countDownTimer( time: Long, timeUnit: TimeUnit = TimeUnit.MILLISECONDS, tick: Long = 1, tickUnit: TimeUnit = TimeUnit.MILLISECONDS ): Observable<Long> { val timeNanos = timeUnit.toNanos(time).also { require(it >= 0) } val tickNanos = tickUnit.toNanos(tick).also { require(it > 0) } val ticks = timeNanos / tickNanos return Observable .intervalRange( 1L, ticks, timeNanos % tickNanos, tickNanos, TimeUnit.NANOSECONDS) .map { ticks - it } .startWith(ticks) } fun start(time: Long, timeUnit: TimeUnit = TimeUnit.SECONDS): Completable { timerSubscription?.dispose() val timer = countDownTimer(time, timeUnit, tickUnit = TimeUnit.SECONDS) timerSubscription = timer.subscribe { text = String.format("%d:%02d", it / 60, it % 60) } return timer.ignoreElements() } 

De cualquier manera, la persona que llama puede suscribirse a ese Completable .

  • Confusión de la syntax de Kotlin lambda
  • Cómo pasar nulo a un Observable con tipo anulable en RxJava 2 y Kotlin
  • No se puede 'observar en' hilo principal con RxKotlin
  • La biblioteca de Kotlin 'rxkotlin-0.21.0.jar' tiene un formatting no compatible. Actualice la biblioteca o el complemento
  • RxJava (Kotlin), Observable.amb y PublishSubject no están disparando
  • RxKotlin flattenAsObservable (): no coincide con el método de reference
  • ¿Cómo hacer un grupo? ¿Por qué coleccionar usando RxJava y Kotlin?
  • Usando RxJava para unir datos locales con datos remotos (o en caching)
  • RxJava - ¿Entradas de keyboard de contrapresión?
  • ¿Cómo leer JSON desde Url usando kotlin Android?
  • ¿Cómo especificar la versión de RxJava al usar RxKotlin?