XMLからではなく、コードを使用して動的にボタンを作成しました。
コードは次のとおりです。
dynamicview = (LinearLayout)findViewById(R.id.llayout);
LinearLayout.LayoutParams lprams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
for(int i=0;i<nob;i++){
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setLayoutParams(lprams);
dynamicview.addView(btn);
}
取得した参照に基づいてアクションを実行できるように、これらの各ボタンにOnClickListenerを実装する方法が見つかりません。
この問題を解決するのを手伝ってくれる人はいますか。 ?
前もって感謝します、
以下のコードを参照してください。
for(int i=0;i<nob;i++) {
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setLayoutParams(lprams);
final int index = i;
btn.setOnClickListener(new OnClickListener() {
void onClick(View v) {
Log.i("TAG", "The index is" + index);
}
});
dynamicview.addView(btn);
}
私の例は非常に単純ですが、ボタンインデックスをOnClickListeber
に取得する方法を示しています。宣言された匿名クラスの任意のfinal
フィールドにアクセスできます(例:OnClickListener
)。
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;
}
}
};
おそらくこれは、動的に作成されたボタンのグループに1つのカウンター変数を使用したい人にとって役立つでしょう。
カウンターの配列を作成しました。
int[] squatReps;
好みから私は要素の量を取りました:
squatReps = new int[squatSets]; // where squatSets is taken from preferences
そして最後にボタンを作成します
for (int i = 0; i < squatSets; i++){
squatReps[i] = Integer.parseInt(sharedPreferences.getString("squats_reps", "0"));
final Button squat_b = new Button(this.getActivity());
squat_b.setId(i);
squat_b.setText("");
squat_b.setLayoutParams(layoutParams);
final int index = i;
squat_b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
squat_b.setText(Integer.toString(squatReps[index]--));
startTimer();
}
});
panel_1.addView(squat_b);
List
を使用し、作成したButton
sをそのList
に追加します
List<Button> list = new ArrayList<Button>();
次に、そのリストにボタンを追加します
for(int i=0;i<nob;i++){
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setLayoutParams(lprams);
dynamicview.addView(btn);
list.add(btn);
}
次に、高度なforループを使用してリストを反復処理し、各ボタンにクリックリスナーを追加します。
for(Button btn : list){
btn.setOnClickListener(this);
}
for(int i=0;i<nob;i++){
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setLayoutParams(lprams);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/////Do some job on button click
}
});
dynamicview.addView(btn);
}
同じことです...
for(int i=0;i<nob;i++){
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setLayoutParams(lprams);
btn.setOnCLickListsener(new listener());
dynamicview.addView(btn);
}
listener implemnets OnClickListenere{
public void onClick(View v){
}
}