android - 由于 Android Studio 中的延迟初始化属性尚未初始化,应用程序崩溃

标签 android kotlin android-alertdialog kotlin-lateinit

我有一个按钮,当我单击它时,它应该显示警报对话框,但是当我单击该按钮时应用程序崩溃我知道代码流程是这样的,但我不知道我在哪里犯了错误

      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())

                }`

最佳答案

我认为您将 dialog 作为 lateinit 变量,但您忘记在 buildDialog 函数中分配它。

      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()
                }

关于android - 由于 Android Studio 中的延迟初始化属性尚未初始化,应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68532519/

相关文章:

android - ExpandableListView - 将选定的子项保持在 "pressed"状态

java - 在 ActionBarActivity 中创建 AlertDialog

java - 如何存储和检索从单个选项中选择的内容

Android - 更改应用程序中所有对话框的对话框标题样式

java - 从 JNI 代码中阻止对话框

android - 如何设置当设备字体增大或减小时textview背景自动适应

android - 添加动态 View ——布局引力问题

Kotlin 独立编译器手动安装

android - 如何避免从 image_view 中的数组中随机化图像?

generics - 具有高阶函数的 Kotlin 合约