0

请看一下这个简单的代码 -clear.getId();无论我在哪里声明clear按钮,我都无法使用开关内部。在我发布的代码中,它被声明在onCreate. 我知道我可以编写/硬编码 id 并且没问题,但我想以正确的方式编码。

代码:

public class AddProduct extends Activity implements OnClickListener {

    Button sendInfo, clear, cancel;
    EditText name, quantity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_product);
        initializeVars();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            // *** --> case (clear.getid()) : break; // *** This doesnt work
            //  case  R.id.bClear : break;
        }
    }

    public void initializeVars() {
        sendInfo = (Button) findViewById(R.id.bAddProduct);
        clear = (Button) findViewById(R.id.bClear);
        cancel = (Button) findViewById(R.id.bCancel);
        name = (EditText) findViewById(R.id.etName);
        quantity = (EditText) findViewById(R.id.etEnterQuantity);
        sendInfo.setOnClickListener(this);
        clear.setOnClickListener(this);
        cancel.setOnClickListener(this);
    }
}

谢谢

4

2 回答 2

0

switch在语句中需要类型char为 、byteshortint枚举类型和字符串的常量 Java 基元。case可以自动装箱为基元(字符、字节、短整数和整数)的数值也可以工作。

于 2013-01-25T22:28:38.000 回答
0

这有点混乱,但您可以扩展每个 View 类并添加一个公共 int 字段。初始化视图构造函数中的字段。

public class ButtonWithID extends Button {

    public final int id;

    public MyExtendedView(Context context){
        this(context, null);
    }

    public MyExtendedView(Context context, AttributeSet attrs){
        this(context, attrs, 0);
    }

    public MyExtendedView(Context context, AttributeSet attrs, int defaultStyle){
        super(context, attrs, defaultStyle);
        this.id = this.getId();
    }

然后

case (clear.id)
于 2013-01-25T23:57:21.877 回答