如何从MainActivity调用方法到LifeCycleObserver

时间:2019-10-17 16:59:20

标签: android kotlin android-activity android-lifecycle

我已经按照教程构建了计时器应用程序。本教程在MainActivity中创建了创建和销毁计时器的方法。现在,我正在尝试在用户离开应用程序时停止计时器。当发生Lifecycle.Event.ON_STOP且应用程序进入后台时,我正在使用LifeCycleObserver进行调用。

我想在用户离开应用程序时在Main Activity中调用一个名为onTimerFinished()的方法

当我尝试在LifeCycleObserver中调用该方法时,它返回一个错误,它是一个未解决的引用。

这是我正在尝试onTimerFinished的LifecycleObserver

class ApplicationObserver() : LifecycleObserver {

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

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

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

这是位于我MainActivity中的onTimerFinished函数

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

当我将变量移到MainActivity的伴随对象中时,它似乎并没有改变实际的计时器。而是更改随播对象的变量。

如何在LifecycleObserver中调用此函数

1 个答案:

答案 0 :(得分:1)

您不能直接调用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() {
}
}

之类的 MainActivity 中创建ApplicationObserver对象时,可以将此参数作为参数传递
val applicationObserver = ApplicationObserver(this)