用作View Tag无效的整数

时间:2012-02-14 18:47:34

标签: java android

直到最近我才使用了视图的标记元素,并且之后发现了一些很酷的用法。我遇到了一个不寻常的问题,希望有人能回答。这可能是比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));
}

1 个答案:

答案 0 :(得分:1)

你没有发布定义POSITIVE和NEGATIVE的地方,但我想你应该检查equailty而不是对象身份。 this question的第一个答案几乎解释了它。

简而言之:改为使用sign.equals(NEGATIVE)