Как вызвать метод из MainActivity в LifeCycleObserver - PullRequest
0 голосов
/ 17 октября 2019

Я следовал руководству по созданию приложения таймера. Учебное пособие создало методы в MainActivity, которые создают и уничтожают таймер. Прямо сейчас я пытаюсь остановить таймер, когда пользователь покидает приложение. Я использую LifeCycleObserver для вызова, когда происходит Lifecycle.Event.ON_STOP и приложение переходит в фоновый режим.

Я хочу вызвать метод onTimerFinished () в Main Activity, когда пользователь покидает приложение

Когда я пытаюсь вызвать метод в моем LifeCycleObserver, он возвращает ошибку, что это неразрешенная ссылка.

Это LifecycleObserver, где я пытаюсь onTimerFinished

class ApplicationObserver() : LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onBackground() {

        Log.d("myTag", "App closed")
        MainActivity.onTimerFinished()

    }
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onForeground() {
    }
}

Этоэто функция onTimerFinished, которая находится в моей MainActivity

private fun onTimerFinished(){
    timerState = TimerState.Stopped
    setNewTimerLength()
    progress_countdown.progress = 0
    PrefUtil.setSecondsRemaining(timerLengthSeconds,this)
    secondsRemaining = timerLengthSeconds
    updateButtons()
    updateCountdownUI()
}

Когда я перемещаю переменные в сопутствующий объект для MainActivity, кажется, что он не изменяет фактический таймер. Скорее он изменяет переменные для объекта-компаньона.

Как я могу вызвать эту функцию в моем LifecycleObserver

1 Ответ

2 голосов
/ 17 октября 2019

Вы не можете называть MainActivity приватным развлечением напрямую. Вам нужна ссылка на него и необходимо сделать метод onTimeFinished общедоступным.

в MainActivity

fun onTimerFinished(){
timerState = TimerState.Stopped
setNewTimerLength()
progress_countdown.progress = 0
PrefUtil.setSecondsRemaining(timerLengthSeconds,this)
secondsRemaining = timerLengthSeconds
updateButtons()
updateCountdownUI()

}

lifecycleobserver

class ApplicationObserver(mainActivity: MainActivity) : LifecycleObserver {

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onBackground() {

    Log.d("myTag", "App closed")
    mainActivity.onTimerFinished()

}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onForeground() {
}
}

, который вы можетепередайте это как параметр при создании объекта ApplicationObserver в MainActivity как

val applicationObserver = ApplicationObserver(this)
...