1

直面している問題は、from-to の日付と時刻のダイアログにあります。私はそれらすべてを別々に作成しました。onCreate で、ユーザーのダイアログに現在の日付と時刻を設定しました。たとえば、今日の日付として 2012 年 7 月 24 日。from_date のダイアログをたとえば 2012 年 7 月 26 日の日付に変更/クリックするたびに、setText を介して to_date ダイアログのテキストを 2012 年 7 月 26 日に変更しました。ここで発生する問題は、to_date ダイアログを開いたときに、ダイアログに表示される日付が 2012 年 7 月 26 日ではなく 2012 年 7 月 24 日であることです。これは、日付と時刻のピッカー ダイアログと同じ方法で実現できます。以下のコードを添付しました。前もって感謝します。

public Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID_FROM:
        Log.i("Date Case", "" + from_day);
        return new DatePickerDialog(this, dateListenerfrom, from_year,
                from_month, from_day);
    case DATE_DIALOG_ID_TO:
        Log.i("Date Case", "" + to_day);
        return new DatePickerDialog(this, dateListenerto, to_year,
                to_month, to_day);
    case TIME_DIALOG_ID_FROM:
        return new TimePickerDialog(this, timeListenerfrom, from_hours,
                from_min, false);
    case TIME_DIALOG_ID_TO:
        return new TimePickerDialog(this, timeListenerto, to_hours, to_min,
                false);

    }
    return null;

}

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

    public void onDateSet(DatePicker view, int yr, int monthOfYear,
            int dayOfMonth) {
        // TODO Auto-generated method stub

        from_year = yr;
        from_month = monthOfYear;
        from_day = dayOfMonth;
        // to_year = yr;
        // to_month = monthOfYear;
        to_day = dayOfMonth;

        Log.i("From Day", "" + from_day);
        Log.i("To Day", "" + to_day);
        Log.i("To Cons", "" + dayOfMonth);

        try {
            updateDateFrom();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
};

private DatePickerDialog.OnCancelListener mDateFromCancelListener = new DatePickerDialog.OnCancelListener() {
    public void onCancel(DialogInterface dialog) {

    }
};

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

    public void onDateSet(DatePicker view, int yr, int monthOfYear,
            int dayOfMonth) {
        // TODO Auto-generated method stub
        to_year = yr;
        to_month = monthOfYear;
        to_day = dayOfMonth;

        Log.i("From Day", "" + from_day);
        Log.i("To Day", "" + to_day);
        Log.i("To Cons", "" + dayOfMonth);

        try {
            updateDateTo();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
};

private void updateDateFrom() throws ParseException {

    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");

    try {
        date_from = dateFormat.parse(from_day + "/" + from_month + "/"
                + from_year + " " + from_hours + ":" + to_min);

    } catch (ParseException e) {
        e.printStackTrace();
    }

    System.out.println("From LONG   " + date_from.getTime());

    from_date_builder = new StringBuilder().append(from_day).append('/')
            .append(from_month + 1).append('/').append(from_year);

    from_date.setText(from_date_builder.toString());

    to_date.setText(new StringBuilder().append(from_day).append('/')
            .append(from_month + 1).append('/').append(from_year));

}

private void updateDateTo() throws ParseException {

    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");

    try {
        date_to = dateFormat.parse(to_day + "/" + to_month + "/" + to_year
                + " " + to_hours + ":" + to_min);

    } catch (ParseException e) {
        e.printStackTrace();
    }

    System.out.println("To LONG   " + date_to.getTime());

    if (date_from.getTime() <= date_to.getTime()) {
        to_date_builder = new StringBuilder().append(to_day).append('/')
                .append(to_month + 1).append('/').append(to_year);
        to_date.setText(to_date_builder.toString());
    } else {
        Toast.makeText(this, "Please set proper date", Toast.LENGTH_SHORT)
                .show();
    }

}

private TimePickerDialog.OnTimeSetListener timeListenerfrom = new TimePickerDialog.OnTimeSetListener() {
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        from_hours = hourOfDay;
        from_min = minute;
        try {
            updateTimeFrom();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
};

private TimePickerDialog.OnTimeSetListener timeListenerto = new TimePickerDialog.OnTimeSetListener() {
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        to_hours = hourOfDay;
        to_min = minute;
        try {
            updateTimeTo();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
};

private void updateTimeFrom() throws ParseException {

    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");

    time_from = dateFormat.parse(from_day + "/" + from_month + "/"
            + from_year + " " + from_hours + ":" + from_min);

    from_time_builder = new StringBuilder().append(from_hours).append(':')
            .append(from_min);

    from_time.setText(from_time_builder.toString());

    to_time.setText(new StringBuilder().append(from_hours).append(':')
            .append(from_min));

}

private void updateTimeTo() throws ParseException {

    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");

    time_to = dateFormat.parse(to_day + "/" + to_month + "/" + to_year
            + " " + to_hours + ":" + to_min);

    if (time_from.getTime() <= time_to.getTime()
            && date_from.getTime() <= date_to.getTime()) {

        to_time_builder = new StringBuilder().append(to_hours).append(':')
                .append(to_min);

        to_time.setText(to_time_builder.toString());
    }

    else {
        Toast.makeText(this, "Please set proper date", Toast.LENGTH_SHORT)
                .show();
    }

    System.out.println("Thi is in the time to ");

}

これは onClick {

if (v == from_date) {
        showDialog(DATE_DIALOG_ID_FROM);
    }

    if (v == to_date) {
        showDialog(DATE_DIALOG_ID_TO);
    }

    if (v == from_time) {
        showDialog(TIME_DIALOG_ID_FROM);
    }
    if (v == to_time) {
        showDialog(TIME_DIALOG_ID_TO);
    }

}

4

2 に答える 2

1

ダイアログボックスに表示される日付/時刻を更新するには、アクティビティに以下のメソッドを実装する必要があります。

protected void onPrepareDialog(int id, Dialog dialog) {
    switch (id) {
        case DATE_DIALOG_ID_TO:
        case DATE_DIALOG_ID_FROM:
            ((DatePickerDialog) dialog).updateDate(mYear, mMonth, mDay);
            break;
    }
} 
于 2012-07-24T09:09:03.780 に答える
0

デフォルトで to_date の from_date を表示したい場合は、to_date 日付ピッカーを変更して日付値から表示することができます。

case DATE_DIALOG_ID_TO:
    Log.i("Date Case", "" + to_day);
    return new DatePickerDialog(this, dateListenerto, from_year,
            from_month, from_day);

または、from_date ピッカーの onDateSet 関数から to_year、to_month、to_day を設定できます。

于 2012-07-24T09:00:53.930 に答える