Search code examples
androidandroid-activitykotlin

How do I use override fun onBackPressed() when my values are in onCreate()


I am trying to reference my constants val inside of override fun onBackPressed() but they are in my onCreate() method and when I move them outside of the onCreate() method I get an initializer error.

None of these work, this is what I've tried:

My ExamActivity:

class ExamActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_exam)

        val popUpView = this.LinearLayoutPopUp
        val menuView = this.LinearLayoutMenu
        val resultView = this.LinearLayoutResult
        val blurView = this.blurView
    }

    override fun onBackPressed() {
        blurView.visibility = VISIBLE
        popUpView.visibility = VISIBLE
        view.visibility = VISIBLE
    }
}

I've also moved my constants outside my onCreate() method and I get an error

class ExamActivity : AppCompatActivity() {

        val popUpView = this.LinearLayoutPopUp
        val menuView = this.LinearLayoutMenu
        val resultView = this.LinearLayoutResult
        val blurView = this.blurView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_exam)

    }

    override fun onBackPressed() {
        blurView.visibility = VISIBLE
        popUpView.visibility = VISIBLE
        view.visibility = VISIBLE
    }
}

and since its a val I can't declare them outside onCreate()`` asnull`` and then set it in onCreate():

class ExamActivity : AppCompatActivity() {

        val popUpView: LinearLayout? = null
        val menuView: LinearLayout? = null
        val resultView: LinearLayout? = null
        val blurView: View? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_exam)

        popUpView = this.LinearLayoutPopUp
        menuView = this.LinearLayoutMenu
        resultView = this.LinearLayoutResult
        blurView = this.blurView

    }

    override fun onBackPressed() {
        blurView.visibility = VISIBLE
        popUpView.visibility = VISIBLE
        view.visibility = VISIBLE
    }
}

How do I set this up where I can access my val constants in the override fun onBackPressed() method?


Solution

  • You can declare variables outside onCreate() method by using lateinit while declaring them. So your code would be like this:

    class ExamActivity : AppCompatActivity() {
    
        lateinit var popUpView
        lateinit var menuView
        lateinit var resultView
        lateinit var blurView
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_exam)
    
            popUpView = this.LinearLayoutPopUp
            menuView = this.LinearLayoutMenu
            resultView = this.LinearLayoutResult
            blurView = this.blurView
        }
    
        override fun onBackPressed() {
            blurView.visibility = VISIBLE
            popUpView.visibility = VISIBLE
            view.visibility = VISIBLE
        }
    }