0

日付を表示するために使用されるアクティビティにTextViewがあります。ユーザーがTextViewをクリックすると、次のようにDatePickerDialogが起動します。

public void onClick(View v) {
    if (v.getId() == R.id.date_wrapper) {
        showDialog(DATE_DIALOG_ID);
    }
}

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
       GregorianCalendar date = new GregorianCalendar();

       if (mData != null) {
           date.setTimeInMillis(mData.getDate());
       }

       return new DatePickerDialog(this, datePickerListener, date.get(Calendar.YEAR), date.get(Calendar.MONTH), date.get(Calendar.DAY_OF_MONTH));
    }

    return null;
}

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {

    // when dialog box is closed, below method will be called.
    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {

        GregorianCalendar selectedDate = new GregorianCalendar();
        selectedDate.set(Calendar.YEAR, selectedYear);
        selectedDate.set(Calendar.MONTH, selectedMonth);
        selectedDate.set(Calendar.DAY_OF_MONTH, selectedDay);

        mData.setDate(selectedDate.getTimeInMillis());

        populateDate();
    }
};

これはうまくいきます。ただし、ユーザーが送信ボタンをクリックしたときに、日付を今日に戻したいと思います。mDataオブジェクトのDate変数を今日に簡単に設定できます。ただし、DatePickerDialogを更新する方法がわかりません。すでに作成されているため、TextViewをクリックしてもonCreateDialogは再度実行されません。したがって、TextViewをクリックすると、DatePickerDialogが開き、最後に選択した日付になります。

DatePickerDialogを参照して日付を更新するにはどうすればよいですか?DatePickerDialogを強制終了することもできます。

4

1 に答える 1

0

私は許容できる解決策を見つけました。

日付をリセットするときはremoveDialog(DATE_DIALOG_ID);、ダイアログを破棄するためにも呼び出す必要があります。次回showDialog(DATE_DIALOG_ID);呼び出されると、再作成されます。

于 2012-11-27T21:45:23.690 に答える