androidandroid-dialog

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first on Dialog Box


I have a method that is displaying a custom Dialog Box

fun showDialog(){

val resultsDialog = Dialog(this)

resultsDialog.setContentView(dialogBinding.root)
dialogBinding.tvDialogCategory.text = CategoryType.HISTORY.name

dialogBinding.tvDialogSetMeetMinimumCriteria.text =displayResultString

resultsDialog.create()

resultsDialog.show()
}

However, when I call this method again after making some validations in my Activity code,

myButton.setOnClickListener{
  //some validation code here
  showDialog()
 

}

I'm getting the error: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first

I've tried various ways to solve this issue but not able to do so. How can I solve this issue? Thanks.


Solution

  • Put result dialog into global variable

    class YourActivity : BaseActivity(){  
      lateinit var resultsDialog
    

    Then Breakdown your show dialog into 2 method, one for initialize the dialog, the other for showing the dialog

    fun initDialog(){
      resultsDialog = Dialog(this)
      resultsDialog.setContentView(dialogBinding.root)
      dialogBinding.tvDialogCategory.text = CategoryType.HISTORY.name
      dialogBinding.tvDialogSetMeetMinimumCriteria.text =displayResultString
      resultsDialog.create()
    }
    
    fun showDialog(){
      resultsDialog.show()
    }
    

    after that, call initDialog() only once on your oncreate method and call your showDialog() on myButton clicklistener