Android DatePickerDialog参数

时间:2012-06-15 19:11:40

标签: java android

我正在运行时动态创建按钮,其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中在活动上。我真的很感激任何想法,谢谢。

1 个答案:

答案 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);