直到最近我才使用了视图的标记元素,并且之后发现了一些很酷的用法。我遇到了一个不寻常的问题,希望有人能回答。这可能是比Android更具普遍性的Java,但我不确定。它与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 :(得分:1)
你没有发布定义POSITIVE和NEGATIVE的地方,但我想你应该检查equailty而不是对象身份。 this question的第一个答案几乎解释了它。
简而言之:改为使用sign.equals(NEGATIVE)
。