0

我在运行时动态创建按钮,他们的点击事件会打开一个 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 中,以获取活动上所有动态控件的所有答案. 我真的很感激任何想法,谢谢。

4

1 回答 1

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
        }

    };

现在,当您单击 a 时,您将使用将在方法中使用的 QuestionIDButton更新一个字段(我不知道您是如何实现的):ButtononCreateDialog

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 字段传递给它,因为每次单击按钮时都会更新它:

DatePickerDialog spd = new DatePickerDialog(this,
                    new TheSpecialListener(questionId), 2012, 6, 16);
于 2012-06-15T19:39:49.477 回答