アンドロイド 2.3.3
N 行 N 列のテーブルがあります。行ごとに 4 つのボタンを動的に追加し、後でクリックされたボタンに基づいてアクションを実行する必要があります。を使用してボタン ID を整数値で設定できることはわかっていますが、XML ファイルで設定するようにbutton.setID()
ID を文字列値として設定できるかどうかを知りたいです。btnXYZ1
btnXYZ2
そのためにタグを使用できます。例えば
btn.setTag("btXYZ");
for (int i=0;i<nob;i++) {
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setOnClickListener(btnclick); <<<<<<<set click
btn.setLayoutParams(lprams);
dynamicview.addView(btn);
}
そして、このリスナーを any メソッドの外側とクラスの内側に追加します
OnClickListener btnclick = new OnClickListener() {
@Override
public void onClick(View view) {
switch(view.getId()) {
case 1:
//first button click
break;
//Second button click
case 2:
break;
case 3:
//third button click
break;
case 4:
//fourth button click
break;
.
.
.
default:
break;
}
}
};
XML ファイルで使用する文字列は R.java の int に対応するため、実際には int です。setId() メソッドは、引数として int 値のみを受け入れます。次のような定数ファイルで ID を定義できます。
public class Ids {
public static final int ID_ONE = 1;
}
そしてそれを次のように使用します:
button.setId(Ids.ID_ONE);
いいえ、文字列に設定することはできません。IDはint値です。XMLから設定した場合でも、int値のリソース名にすぎません。
とにかくビューへの参照がある場合は、たとえばHashMapを使用して、それらすべてをHashMapに保存するだけです。
タイプミスを回避するためのもう1つの方法は、hashMapのキーとして列挙型を使用することです(例:HashMap)。
いいえ、に設定することはできませんString
。ID はint
値です。設定したとしても、値XML
のリソース名に過ぎません。int