2012-05-29 35 views
2

爲了修道者的目的,我需要使用單選按鈕作爲切換按鈕。不幸的是,我只能讓它保持選中狀態或取消選中狀態,但不能重新檢查。我嘗試了所有我能想到的組合,但無法實現。 toggle()將不起作用,因爲它只會檢查未經檢查的單選按鈕。我試過了isChecker()和setChecked()的組合,但它不起作用。這是我目前有:爲什麼我的單選按鈕不會更改檢查狀態,如切換按鈕(Android)?

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()應該改變它,對吧?

+1

==就是答案。 http://www.javacoffeebreak.com/articles/toptenerrors.html(滾動至第8位) – Blundell

+2

您可以將代碼縮減爲1行:pi.setChecked(!pi.isChecked());如果你需要知道你的應用程序的其他地方有什麼手指,添加行pistate = pi.isChecked();在它下面 – dymmeh

+0

@dophora:剛剛發現了你的評論。你擊敗了我。 – Squonk

回答

4

你並不需要維護「國家」使用單獨的Boolean只是下面...

pi.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     pi.setChecked(!pi.isChecked()); 
    } 
}); 
+0

它不適合我。總是回到相同的狀態。 –

4

好,因爲它是一個比較,你應該使用==

if(pistate == true)

或者,如果它是一個對象引用您想

if(object.equals(pistate))

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)); 
    } 
});