Search code examples
androidkotlinandroid-alertdialogkotlin-lateinit

app crashes as the late init property has not been initialized in android studio


I have a button, when i click on that, it should show the Alert dialog box, But app crashes when i click on that button I know the code flow is this but I dont know Where i had done my mistake

      private lateinit var btn: Button
      
 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_dynam)
        btn = findViewById(R.id.add1)
        buildDialog()

        btn.setOnClickListener(object : View.OnClickListener {
            override fun onClick(v: View?) {
              dialog.show()
            }
        })
    }

    private fun buildDialog() {
        val builder=android.app.AlertDialog.Builder(this)
        val view=layoutInflater.inflate(R.layout.dialog_dynam,null)
      val name=  view.findViewById<EditText>(R.id.nameEdit)
        builder.setView(view)
        builder.setTitle("Enter name")
            .setPositiveButton("Ok",object :DialogInterface.OnClickListener{
                override fun onClick(dialog: DialogInterface?, p1: Int) {
addname(name.text.toString())

                }`

Solution

  • I think you have dialog as a lateinit variable and you forgot to assign it in buildDialog function.

          private lateinit var btn: Button
          private lateinit var dialog:AlertDialog
    
          
          override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_dynam)
            btn = findViewById(R.id.add1)
            buildDialog()
    
            btn.setOnClickListener(object : View.OnClickListener {
                override fun onClick(v: View?) {
             if (this@YourActivity::dialog.isInitialized) { // to check if dialog is initialize or not
              dialog.show()
             }
                
                }
            })
        }
    
        private fun buildDialog() {
            val builder=android.app.AlertDialog.Builder(this)
            val view=layoutInflater.inflate(R.layout.dialog_dynam,null)
            val name=  view.findViewById<EditText>(R.id.nameEdit)
            builder.setView(view)
            builder.setTitle("Enter name")
                .setPositiveButton("Ok",object :DialogInterface.OnClickListener{
                    override fun onClick(dialog: DialogInterface?, p1: Int) {
                    addname(name.text.toString())
    
            // initialize dialog
            dialog = builder.create()
                    }