复选框在Android kotlin中出现和消失



我目前卡住了,我应该如何改变当前的代码来显示,如果用户选择不适合,它会显示电影和戏剧复选框,否则如果取消它消失电影和戏剧复选框,只显示不适合

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"作为线性布局的一个属性。

  1. 您缺少if/else括号。永远不要省略括号,除非你在用一行代码给变量赋值,因为这会导致各种错误。

  2. 你弄混了变量名。您在更改侦听器中使用了isCheckednotChecked。但是,在调用这个侦听器时,如何知道这些值是否是最新的呢?您需要使用实际复选框的属性来获取当前值,或者侦听器提供的值。

  3. 你的逻辑过于复杂。当检查一个布尔值时,你不需要做== true。这是多余的,因为==检查返回真或假,所以它就像说,如果这是真,使它为真。您可以通过简单地使用布尔值来设置您的值来避免整个if/else检查。

这是你的代码的简化版本

chkBoxNotsuit.setOnCheckedChangeListener { _, isChecked ->
    chkBoxMovie.isVisible = !isChecked 
    chkBoxDrama.isVisible = !isChecked 
    displayToast(message)
}

最新更新