如果 activity 不是从方向旋转重新创建的,如何执行代码?

How to execute code if activity wasn't re-created from orientation rotation?

我想做一个像应用程序一样的测验。我有一个 class 负责处理问题。我还有一个视图模型,可以容纳这些问题和其他 UI 元素,以协助 UI 旋转更改。

我的代码看起来像这样:

override fun onCreate() {
    var questions = quizModel.generateQuestions()
    quizViewModel.questions = questions
}

问题是,我只想在 activity 由于旋转和设备方向改变而未重新创建时执行此操作。这是因为我的视图模型已经保存了我的问题列表,所以我不需要生成另一组问题,只需从视图模型中获取问题即可。

只有当 activity 不是从方向更改中重新创建时,是否有一些 IF 条件检查我可以尝试执行上面的代码?

使用:

protected void onCreate (Bundle savedInstanceState)

https://developer.android.com/reference/android/app/Activity#onCreate(android.os.Bundle)

如果 savedInstanceState 为 null 那么它是你第一次创建 activity,如果不为 null 那么它正在被重新创建。

Change your ViewModel to be something like this

class QuizModel():ViewModel(){
    // Change String? to your return type
    private var generatedQuestions : String? = null

    // Change String to your return type
    fun generateQuestions() : String {

        if (generatedQuestions == null) {
            // put your code here
            
            // at the end
            generatedQuestions = "the result of your code"
        }
        
        return generatedQuestions!!
    }

}

and for your Activity

class yourActivity() {
    lateinit var question: yourType
    override fun onCreate() {
        question = quizModel.generateQuestions()
    }
}