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