2012-02-14 4 views
0

私はちょうど最近までビューのタグ要素を使用していませんでした。私は誰かが答えることができる珍しい問題に遭遇しました。これはAndroidよりJavaの方が一般的かもしれませんが、わかりません。これは、JavaがIntegerクラスをどのように処理するかと関係しています。ビュータグとして使用される整数

これらのビットを参照してください。それは正しく、これは正しく動作します。ここで仮定することができます。正と負は定数です。

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

答えて

1

定義されている正と負のあなたは投稿しませんでしたが、私はあなたがequailtyの代わりに、オブジェクト識別情報を確認する必要がありますね。 this questionへの最初の答えはかなりそれを説明します。

要約:代わりにsign.equals(NEGATIVE)を使用してください。

+0

完璧な意味合いがあります、ありがとうございます。 – Maximus

関連する問題