1

正面臨的問題是from-to-date和time對話框。我創造了所有他們分開。 on onCreate我已經在用戶的對話框上設置了當前的日期和時間。即例如24/7/2012作爲今天的日期。當我改變/點擊從from_date到2012/7/7的日期對話框時,我已經通過setText將to_date對話框的文本更改爲26/7/2012。這裏出現的問題是,當我打開to_date對話框時,出現在對話框中的日期是2012年7月24日,而不是2012年7月26日。如何在日期和時間選擇器對話框中實現這一點。我附上了下面的代碼。 在此先感謝。Android datepicker和timepicker問題

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

}

回答

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

嗨Sudhaker,這在一定程度上謝謝,後來我做了驗證,當在to_date小於from_date日期不會被設置。這會拋出一個敬酒,然後當我打開to_date對話框時,日期是錯誤的驗證日期,而不是通過按鈕上的settext設置的。 – dominic 2012-07-24 09:21:10

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 picker的onDateSet函數設置to_year,to_month和to_day。

+0

我試過了,通過settext設置後它包含了前一個日期。 – dominic 2012-07-24 09:06:22