How To Set The Text At Particular Id In Dynamic Generated Button
I have the following code. In this i have dynamically generated buttons.when click the button it shows the timepicker. My problem is to set the time for clicked button but it set t
Solution 1:
Try like to update the text of particular Button
Button b=(Button)list.getChildAt(btn_cnt);
b.settext(time);
As you are storing the Button Id
in btn_cnt, so can get the view with getChildAt(position)
Where list is your Layout
where you adding the Button dynamically
.
publicvoidaddButton(intvalue) {
list.removeAllViews();
for (i=0 ; i < value; i++) {
button = new Button(this);
button.setText("Add Time");
button.setId(i);
button.setOnClickListener(new OnClickListener() {
publicvoidonClick(View v) {
Calendar mCalendar = Calendar.getInstance();
new TimePickerDialog(MedInfo.this, onTimeListener, mCalendar
.get(Calendar.HOUR_OF_DAY), mCalendar.get(Calendar.MINUTE), false)
.show();
btn_cnt = v.getId();
Toast.makeText(getApplicationContext(), ""+btn_cnt, Toast.LENGTH_SHORT).show();
}
});
list.addView(button);
}
}
TimePickerDialog.OnTimeSetListener onTimeListener = new OnTimeSetListener() {
publicvoidonTimeSet(TimePicker view, int hourOfDay, int minute) {
String AM_PM;
Calendar mCalendar = Calendar.getInstance();
if (hourOfDay < 12) {
AM_PM = "AM";
} else {
AM_PM = "PM";
}
long start_time = DateTimeUtils.getTimeInMillis(hourOfDay, minute, 0);
Calendar calendar = Calendar.getInstance();
long mseconds = DateTimeUtils.getFirstMillis(calendar.get(Calendar.DATE),
calendar.get(Calendar.MONTH), calendar.get(Calendar.YEAR));
time = start_time + mseconds;
Button b=(Button)list.getChildAt(btn_cnt);
b.settext(time);
mCalendar.set(Calendar.HOUR, hourOfDay);
mCalendar.set(Calendar.MINUTE, minute);
}
};
Edit:- You can use List
instead of Array
for retrieving all the time from Button.
List<String> listOfDate=new ArrayList<String>();
for(int i=0;i<list.getChildCount();i++)
{
Button b=(Button)list.getChildAt(i);
listOfDate.add(b.getText().toString());
}
Hope this will help you.
Solution 2:
One possible solution is to implement a custom OnTimeSetListener
which can keep reference to the clicked button. Before you show the time picker, inform the custom listener which button was clicked. See code below:
publicvoidaddButton(intvalue) {
list.removeAllViews();
for (i=0 ; i < value; i++) {
button = new Button(this);
button.setText("Add Time");
button.setId(i);
button.setOnClickListener(new OnClickListener() {
publicvoidonClick(View v) {
Calendar mCalendar = Calendar.getInstance();
// set the button which was clicked
onTimeListener.setClickedButton((Button)v);
new TimePickerDialog(this, onTimeListener, mCalendar
.get(Calendar.HOUR_OF_DAY), mCalendar.get(Calendar.MINUTE), false)
.show();
btn_cnt = v.getId();
Toast.makeText(getApplicationContext(), ""+btn_cnt, Toast.LENGTH_SHORT).show();
}
});
list.addView(button);
}
}
TimePickerDialog.OnTimeSetListener onTimeListener = new MyOnTimeSetListenter();
classMyOnTimeSetListenterimplementsTimePickerDialog.OnTimeSetListener {
private Button button;
publicvoidsetClickedButton(Button button) {
this.button = button;
}
@Override
publicvoidonTimeSet(TimePicker timePicker, int i, int i2) {
String AM_PM;
Calendar mCalendar = Calendar.getInstance();
if (hourOfDay < 12) {
AM_PM = "AM";
} else {
AM_PM = "PM";
}
long start_time = DateTimeUtils.getTimeInMillis(hourOfDay, minute, 0);
Calendar calendar = Calendar.getInstance();
long mseconds = DateTimeUtils.getFirstMillis(calendar.get(Calendar.DATE),
calendar.get(Calendar.MONTH), calendar.get(Calendar.YEAR));
time = start_time + mseconds;
this.button.settext(time);
mCalendar.set(Calendar.HOUR, hourOfDay);
mCalendar.set(Calendar.MINUTE, minute);
}
}
Solution 3:
Simply create a global variable and set its value onTimeListener and whenever required setText(global_variable)
Post a Comment for "How To Set The Text At Particular Id In Dynamic Generated Button"