Пользовательская ошибка AlertDialog при повторном нажатии - PullRequest
0 голосов
/ 12 февраля 2020

Это код:

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 () у родителя ребенка.

Что мне делать?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Просто добавьте create () в конце setView. и вы сможете снова и снова использовать одно и то же диалоговое окно.

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()
            })
        }
    }
1 голос
/ 12 февраля 2020

Вы можете создать одну функцию ShowAlertDailog и вызывать эту функцию в своей активности onCreate.

См. Ниже Код ShowAlertDailog

private fun showFilterDailog() {
    val layoutInflater: LayoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    val layoutInflateView = layoutInflater.inflate(R.layout.filter_dialog_item, null)
    val builder = AlertDialog.Builder(context)
    builder.setView(layoutInflateView)
    mdialog = builder.create()



    var alertclear: TextView
    var alertcancel: TextView
    var txt_header: TextView



    txt_header = layoutInflateView.findViewById(R.id.txt_header)
    alertcancel = layoutInflateView.findViewById(R.id.alertcancel)
    alertclear = layoutInflateView.findViewById(R.id.alertclear)



    alertok.setOnClickListener(object : View.OnClickListener {
        override fun onClick(view: View?) {
            if (mdialog != null) {
                mdialog?.dismiss()
            }
         // This Helps you to close dailogbox if it is alredy open and 
         // Then after your can write your code to perform as per your requirment.
        }
    })
    alertdismiss.setOnClickListener(object : View.OnClickListener {
        override fun onClick(view: View?) {

            mdialog?.dismiss()
          // This Helps you to close dailogbox 
        }
    })

    mdialog!!.window!!.setBackgroundDrawableResource(android.R.color.transparent)
    mdialog!!.setCancelable(false)
   // With the help of setcancelable=false your dialog is not close
    // if some touch on  phone.
    mdialog!!.show()

}
...