我正在尝试在android中的按钮上实现日期选择器。但是一旦我点击按钮错误弹出。但时间选择器运行良好。这是代码:
mPickDate.setOnClickListener(new View.OnClickListener() { //Assigning onClickListener to Date Button
public void onClick(View v) {
showDialog(DATE_DIALOG_ID);
}
});
pickTime.setOnClickListener(new View.OnClickListener() { //Assigning onClickListener to Time Button
@Override
public void onClick(View v) {
showDialog(TIME_DIALOG_ID);
}
});
}
@Override
protected Dialog onCreateDialog(int id) { //Overriding onCreateDialog()
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
case TIME_DIALOG_ID:
return new TimePickerDialog(this,mTimeSetListener,mHour,mMin,true);
}
return null;
}
TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { //Defining the TimePickerDialog reference variable
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHour=hourOfDay;
mMin= minute;
updateTime();
}
};
DatePickerDialog.OnDateSetListener mDateSetListener = //Defining the DatePickerDialog reference variable
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
updateDisplay();
}
};
这是logcat:
10-13 16:41:46.878: ERROR/AndroidRuntime(761): FATAL EXCEPTION: main
10-13 16:41:46.878: ERROR/AndroidRuntime(761): java.lang.IllegalArgumentException: current should be >= start and <= end
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.widget.NumberPicker.setCurrent(NumberPicker.java:288)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.widget.DatePicker.updateDaySpinner(DatePicker.java:370)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.widget.DatePicker.updateSpinners(DatePicker.java:356)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.widget.DatePicker.init(DatePicker.java:352)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.app.DatePickerDialog.<init>(DatePickerDialog.java:127)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.app.DatePickerDialog.<init>(DatePickerDialog.java:86)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at acb.xiynove.OfflineScreen_ACBActivity.onCreateDialog(OfflineScreen_ACBActivity.java:74)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.app.Activity.onCreateDialog(Activity.java:2482)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.app.Activity.createDialog(Activity.java:882)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.app.Activity.showDialog(Activity.java:2557)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.app.Activity.showDialog(Activity.java:2524)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at acb.xiynove.OfflineScreen_ACBActivity$3.onClick(OfflineScreen_ACBActivity.java:56)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.view.View.performClick(View.java:2485)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.view.View$PerformClick.run(View.java:9080)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.os.Handler.handleCallback(Handler.java:587)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.os.Handler.dispatchMessage(Handler.java:92)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.os.Looper.loop(Looper.java:123)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at android.app.ActivityThread.main(ActivityThread.java:3683)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at java.lang.reflect.Method.invokeNative(Native Method)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at java.lang.reflect.Method.invoke(Method.java:507)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-13 16:41:46.878: ERROR/AndroidRuntime(761): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:23)
我遇到了同样的问题,但我找到了解决办法。你应该初始化 mYear,mMonth,mDay :
//Init this variables as you wish eg.:
private int mYear = 2010;
private int mMonth = 11;
private int mDay =1;
@Override
protected Dialog onCreateDialog(int id) { //Overriding onCreateDialog()
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
case TIME_DIALOG_ID:
return new TimePickerDialog(this,mTimeSetListener,mHour,mMin,true);
}
return null;
}