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の定数Javaプリミティブbyte、またはステートメントに列挙型と文字列が必要です。プリミティブ(文字、バイト、短、整数)に自動ボックス化できる数値も機能します。shortintcase

于 2013-01-25T22:28:38.000 に答える
0

これは少し面倒ですが、各Viewクラスを拡張して、publicintフィールドを追加することができます。ビューのコンストラクターでフィールドを初期化します。

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 に答える