2

出于苦行者的目的,我需要使用单选按钮作为切换按钮。不幸的是,我只能让它保持选中或取消选中但不能重新选中。我已经尝试了所有我能想到的组合,但无法让它发挥作用。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 在之前和之后都读取错误,这完全没有意义,因为我的 if() 应该改变它,对吧?

4

3 回答 3

4

好吧,因为这是一个比较,你应该使用==

if(pistate == true)

或者,如果它是您想要的对象引用

if(object.equals(pistate))

于 2012-05-29T21:10:24.607 回答
4

您不需要使用单独的来维护“状态”,Boolean只需执行以下操作...

pi.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        pi.setChecked(!pi.isChecked());
    }
});
于 2012-05-29T21:23:44.033 回答
1

嗯,和我要说的一样。使用 == 会有所帮助。无论如何,该方法可能会更加复杂。我会建议:

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));
    }
});
于 2012-05-29T21:21:27.690 回答