为什么赢了';我的单选按钮不会像切换按钮(Android)那样更改选中状态吗?
为了苦行的目的,我需要使用单选按钮作为切换按钮。不幸的是,我只能让它保持检查或取消检查,但不能重新检查。我尝试了我能想到的每一种组合,但都没能成功。toggle()无法工作,因为它只会检查未选中的单选按钮。我尝试了isChecker()和setChecked()的组合,但它不起作用。这就是我目前拥有的:为什么赢了';我的单选按钮不会像切换按钮(Android)那样更改选中状态吗?,android,radio-button,toggle,togglebutton,Android,Radio Button,Toggle,Togglebutton,为了苦行的目的,我需要使用单选按钮作为切换按钮。不幸的是,我只能让它保持检查或取消检查,但不能重新检查。我尝试了我能想到的每一种组合,但都没能成功。toggle()无法工作,因为它只会检查未选中的单选按钮。我尝试了isChecker()和setChecked()的组合,但它不起作用。这就是我目前拥有的: pi.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {
pi.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.e("Pistate before",Boolean.toString(pistate));
if(pistate=true)
pi.setChecked(false);
if(pistate=false)
pi.setChecked(true);
if(pi.isChecked())
pistate=true;
if(!pi.isChecked())
pistate=false;
Log.e("Pistate after",Boolean.toString(pistate));
}
});
一旦取消选中,它将不会重新检查。pistate在之前和之后都是false,这完全没有意义,因为我的if()应该更改它,对吗?既然它是一个比较,你应该使用
=
if(pistate==true)
或者如果它是您想要的对象引用
如果(object.equals(pistate))
那么我会说。
使用==将有所帮助。
尽管如此,这种方法还是很复杂的。
我建议:
pi.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.e("Pistate before",Boolean.toString(pistate));
pistate = !pistate;
pi.setChecked(pistate);
Log.e("Pistate after",Boolean.toString(pistate));
}
});
您不需要使用单独的
布尔值来维护“状态”,只需执行以下操作即可
pi.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
pi.setChecked(!pi.isChecked());
}
});
==是答案。(滚动到数字8)您可以将代码减少到1行:pi.setChecked(!pi.isChecked());如果您需要知道应用程序中其他地方的pistate是什么,请添加行pistate=pi.isChecked();在下面it@dymmeh:刚刚看到你的评论。是的,==是错的,但不是问题所在。这在我的实际代码中是正确的。Squonk的评论和我想的一模一样。谢谢allIt对我不起作用。总是回到同样的状态。