我目前卡住了,我应该如何改变当前的代码来显示,如果用户选择不适合,它会显示电影和戏剧复选框,否则如果取消它消失电影和戏剧复选框,只显示不适合
Movie.kt中的当前代码
chkBoxNotsuit.setOnCheckedChangeListener {
if (chkBoxNotsuit.isChecked == true)
chkBoxMovie.isVisible = !isChecked
chkBoxDrama.isVisible = !isChecked
else
chkBoxMovie.isInvisible = !notChecked
chkBoxDrama.isInvisible = !notChecked
displayToast(message)
}
fun displayToast(message:String){
Toast.makeText(this,message,Toast.LENGTH_LONG).show()
}
你可以这样做
chkBoxNotsuit.setOnCheckedChangeListener { _, isChecked ->
chkBoxMovie.visibility = if (isChecked) View.VISIBLE else View.GONE
chkBoxDrama.visibility = if (isChecked) View.VISIBLE else View.GONE
}
chkBoxNotsuit=findViewById(R.id.chkBoxNotsuit)
linearLayout=findViewById(R.id.linearlayout)
chkBoxNotsuit.setOnCheckedChangeListener { buttonView, isChecked ->
if(isChecked){
linearLayout.isVisible=true // Setting the checkboxes Visible
}else{
linearLayout.isVisible=false // Setting the checkboxes Invisible
displayToast(message)
}
}
}
fun displayToast(message:String){
Toast.makeText(this,message,Toast.LENGTH_LONG).show()
}
}
在Movie.xml中,你还必须输入android:visibility="invisible"作为线性布局的一个属性。
-
您缺少if/else括号。永远不要省略括号,除非你在用一行代码给变量赋值,因为这会导致各种错误。
-
你弄混了变量名。您在更改侦听器中使用了
isChecked
和notChecked
。但是,在调用这个侦听器时,如何知道这些值是否是最新的呢?您需要使用实际复选框的属性来获取当前值,或者侦听器提供的值。 -
你的逻辑过于复杂。当检查一个布尔值时,你不需要做
== true
。这是多余的,因为==
检查返回真或假,所以它就像说,如果这是真,使它为真。您可以通过简单地使用布尔值来设置您的值来避免整个if/else检查。
这是你的代码的简化版本
chkBoxNotsuit.setOnCheckedChangeListener { _, isChecked ->
chkBoxMovie.isVisible = !isChecked
chkBoxDrama.isVisible = !isChecked
displayToast(message)
}