2012-02-14 39 views
0

直到最近我還沒有使用視圖的標記元素,並且從那以後就發現了一些很酷的用法。我遇到了一個不尋常的問題,希望有人能夠回答。這可能比Android更具有一般性,但我不確定。它與Java如何處理Integer類有關。整數用作視圖標記不起作用

請參閱這些方法位。事實上,這是正確的。你可以在這裏假設POSITIVE和NEGATIVE是常數。

public void onClick(View v) { 

    switch(v.getId()){ 

    case R.id.dialog_addrecord_button_sign: 

     Sign mSign = (Sign) v.getTag(); 

     if(mSign.sign == NEGATIVE){ 
      ((Button) v).setText("+"); 
      mSign.sign = POSITIVE; 
     } else { 
      ((Button) v).setText("-"); 
      mSign.sign = NEGATIVE; 
     } 

     break; 

    } 

}; 


private void initButtons(){ 
    signButton = (Button) findViewById(R.id.dialog_addrecord_button_sign); 
    signButton.setOnClickListener(this); 
    signButton.setTag(new Sign()); 
} 

private class Sign { 

    int sign; 

    private Sign(){ 
     sign = NEGATIVE; 
    } 

} 

我意識到,雖然,我可以只使用Integer類代替,而不是與只有一個字段的自定義類仔細考慮一下。我改變了這個,但是按鈕只切換一次,告訴我有什麼我不知道Java如何處理Integer類......有人能告訴我爲什麼這不起作用嗎?

public void onClick(View v) { 

    switch(v.getId()){ 

    case R.id.dialog_addrecord_button_sign: 

     Integer sign = (Integer) v.getTag(); 

     if(sign == NEGATIVE){ 
      ((Button) v).setText("+"); 
      sign = POSITIVE; 
     } else { 
      ((Button) v).setText("-"); 
      sign = NEGATIVE; 
     } 

     break; 

    } 

}; 


private void initButtons(){ 
    signButton = (Button) findViewById(R.id.dialog_addrecord_button_sign); 
    signButton.setOnClickListener(this); 
    signButton.setTag(new Integer(NEGATIVE)); 
} 
+0

我正在添加由編輯器刪除的Java標記。答案尤其與Java相關。 – Maximus 2012-02-14 19:52:55

回答

1

您沒有發佈POSITIVE和NEGATIVE定義的位置,但我想您應該檢查equailty而不是對象標識。對this question的第一個回答幾乎可以解釋它。

總之:用sign.equals(NEGATIVE)代替。

+0

完美感,謝謝。 – Maximus 2012-02-14 19:50:51