问题
I dynamically created buttons through code rather than from XML.
The code is as below :
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);
}
I am not finding a way in which I can implement OnClickListener to each of these buttons so that I can perform action based on the reference I get.
Can anyone help me in sorting out this issue. ?
Thanks in Advance,
回答1:
See the code below:
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);
}
My example is pretty simple, but demonstrates how you can get the button index into the OnClickListeber
. You can access any final
field in the declared anonymous classes (e..g the OnClickListener
).
回答2:
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);
}
And add this listner outside the any method and inside class
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;
}
}
};
回答3:
Use a List
and add Button
s you create to that List
List<Button> list = new ArrayList<Button>();
Now add your button to that List
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);
}
Then use advanced for loop to iterate through the list and add click listener for each Button..
for(Button btn : list){
btn.setOnClickListener(this);
}
回答4:
Maybe this will be helpful for somebody I wanted to use the one counter variable for group of dynamically created buttons:
I've created the array for counters:
int[] squatReps;
From preferences I've taken the quantity of elements:
squatReps = new int[squatSets]; // where squatSets is taken from preferences
And finally we create the buttons
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);
回答5:
its the same thing...
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){
}
}
回答6:
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);
}
来源:https://stackoverflow.com/questions/10673628/implementing-onclicklistener-for-dynamically-created-buttons-in-android