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;
         }

}; 

したがって、ダイアログの値がありますが、アクティビティのすべての動的コントロールのすべての回答のArrayListに値を入れるために、ユーザーがクリックしたボタンに関連付けられたQuestionIDが必要です。 。どんなアイデアでも本当にありがたいです、ありがとう。

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
        }

    };

ここで、をクリックすると、メソッドで使用されるそのQuestionIDでButtonフィールドが更新されます(どのように実装したかはわかりません)。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 に答える