首页 > 解决方案 > 第二次单击时自定义 AlertDialog 错误

问题描述

这是代码:

class Widgets_TextView : AppCompatActivity() {

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

        val inflater = layoutInflater
        val dialogView = inflater.inflate(R.layout.customed_dialog, null)

        widgets_textview_mainkt.setOnClickListener(View.OnClickListener {
            dialogView.findViewById<TextView>(R.id.main_content).setText("AAAA")
            val alertDialog = AlertDialog.Builder(this).setView(dialogView)
            alertDialog.show()

        })
    }
}

第一次单击时,它运行良好,但是,当第二次单击时,它会出错。

这是错误:

java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。

我应该怎么办?

标签: androidandroid-alertdialog

解决方案


只需在 setView 末尾添加 create() 即可。您将能够一次又一次地使用相同的对话框。

class Widgets_TextView : AppCompatActivity() {

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

            val inflater = layoutInflater
            val dialogView = inflater.inflate(R.layout.customed_dialog, null)
            val alertDialog = AlertDialog.Builder(this).setView(dialogView).create()
            widgets_textview_mainkt.setOnClickListener(View.OnClickListener {
                dialogView.findViewById<TextView>(R.id.main_content).setText("AAAA")
                alertDialog.show()
            })
        }
    }

推荐阅读