如何解决“指定的孩子已经有一个父母你必须先在孩子的父母上调用 removeView()”第二次我创建一个 AlertDialog
当我第一次点击按钮时,它运行正常。但是当我第二次点击它时,程序崩溃了:
The specified child already has a parent. You must call removeView() on the child's parent first.
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
binding = ActivityMainBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
setContentView(binding.root)
val view1 = layoutInflater.inflate(R.layout.main_view1,null,false)
val btn1 = view1.findViewById<Button>(R.id.btn1)
val btn2 = view1.findViewById<Button>(R.id.btn2)
val btn3 = view1.findViewById<Button>(R.id.btn3)
btn1.setOnClickListener {
binding.textView.setTextColor(Color.RED)
}
btn2.setOnClickListener {
binding.textView.setTextColor(Color.BLUE)
}
btn3.setOnClickListener {
binding.textView.setTextColor(Color.GREEN)
}
binding.button.setOnClickListener {
AlertDialog.Builder(this)
.setTitle("Color")
.setView(view1)
.setCancelable(false)
.setPositiveButton("ok",DialogInterface.OnClickListener { _,_ ->
})
.create().show()
}
}
}
解决方法
问题在于您创建并持有对 view1
的引用一次:
val view1 = layoutInflater.inflate(R.layout.main_view1,null,false)
但是每次单击按钮时都尝试使用相同的视图:
binding.button.setOnClickListener {
AlertDialog.Builder(this)
.setTitle("Color")
.setView(view1)
.setCancelable(false)
.setPositiveButton("ok",DialogInterface.OnClickListener { _,_ ->
})
.create().show()
}
要解决这个问题,您应该将设置代码移到按钮单击侦听器中,以便为每个新的 view1
获得一个新的 AlertDialog
:
binding.button.setOnClickListener {
val view1 = layoutInflater.inflate(R.layout.main_view1,false)
val btn1 = view1.findViewById<Button>(R.id.btn1)
val btn2 = view1.findViewById<Button>(R.id.btn2)
val btn3 = view1.findViewById<Button>(R.id.btn3)
btn1.setOnClickListener {
binding.textView.setTextColor(Color.RED)
}
btn2.setOnClickListener {
binding.textView.setTextColor(Color.BLUE)
}
btn3.setOnClickListener {
binding.textView.setTextColor(Color.GREEN)
}
AlertDialog.Builder(this)
.setTitle("Color")
.setView(view1)
.setCancelable(false)
.setPositiveButton("ok",_ ->
})
.create().show()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。