为什么赢了';我的单选按钮不会像切换按钮(Android)那样更改选中状态吗?

为什么赢了';我的单选按钮不会像切换按钮(Android)那样更改选中状态吗?,android,radio-button,toggle,togglebutton,Android,Radio Button,Toggle,Togglebutton,为了苦行的目的,我需要使用单选按钮作为切换按钮。不幸的是,我只能让它保持检查或取消检查,但不能重新检查。我尝试了我能想到的每一种组合,但都没能成功。toggle()无法工作,因为它只会检查未选中的单选按钮。我尝试了isChecker()和setChecked()的组合,但它不起作用。这就是我目前拥有的: pi.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {

为了苦行的目的,我需要使用单选按钮作为切换按钮。不幸的是,我只能让它保持检查或取消检查,但不能重新检查。我尝试了我能想到的每一种组合,但都没能成功。toggle()无法工作,因为它只会检查未选中的单选按钮。我尝试了isChecker()和setChecked()的组合,但它不起作用。这就是我目前拥有的:

    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对我不起作用。总是回到同样的状态。