我正在运行时动态创建按钮,其click事件会打开一个datepickerdialog。像这样:
Button btnDate = new Button(this);
btnDate.setText("Date");
btnDate.setTag(new UDAControlItemTag(q.getiQuestionID(),-1,f.getiSectionID(),f.getiGroup(),-1,"Date",""));
btnDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button tempBtn = (Button)v;
UDAControlItemTag tempQ = (UDAControlItemTag)tempBtn.getTag();
showDialog(DATE_DIALOG_ID_Question);
//tempBtn.setText(Integer.toString(mTempMonth));
}
});
然后我有监听器,我可以获取值和东西,但因为我正在动态创建控件,我将每个控件的这些值保存在具有不同属性的ArrayList中。我遇到的问题是如何获取我需要正确确定单击哪个按钮的参数,以便将该问题的正确属性放入ArrayList。
private DatePickerDialog.OnDateSetListener mDateSetListenerQuestion =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
mTempYear = year;
mTempMonth = monthOfYear;
mTempDay = dayOfMonth;
}
};
所以在那里我有对话框的值,但是我需要有一个与用户点击的按钮相关联的QuestionID,以便将值放入所有动态控件的所有答案的ArrayList中在活动上。我真的很感激任何想法,谢谢。
答案 0 :(得分:1)
您可以使用自己的实现DatePickerDialog.OnDateSetListener
接口的类来代替该侦听器,并且还有一个带int
QuestionID
的构造函数。像这样:
public class TheSpecialListener implements
DatePickerDialog.OnDateSetListener {
private int id;
public TheSpecialListener(int id) {
this.id = id;
}
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
mTempYear = year;
mTempMonth = monthOfYear;
mTempDay = dayOfMonth;
// id is the QuestionID so you now can identify the Button that started the dialog
}
};
现在,当您点击Button
时,您将使用Button
方法中使用的onCreateDialog
的QuestionID更新字段(我不知道您是怎么做的)实现):
private int questionId;
和Button
听众:
//...
Button tempBtn = (Button)v;
UDAControlItemTag tempQ = (UDAControlItemTag)tempBtn.getTag();
questionId = //here pass the Button's id or whatever
showDialog(DATE_DIALOG_ID_Question);
并在onCreateDialog
方法中实例化上面的特殊侦听器并向其传递将保存标识符的questionId字段,因为每次单击Button时它都会更新:
DatePickerDialog spd = new DatePickerDialog(this,
new TheSpecialListener(questionId), 2012, 6, 16);