如果EditText行具有先前选择的日期(长度测试> 0),那么我使用Bundle将该日期传递给DatePicker片段。当我下次单击EditText行再次启动DatePicker时,我希望看到以前选择的日期作为默认日期。但我看到了1899年12月的月历,这一天默认为“1”。我在这里错过了什么?
部分活动文件,在onCreate:
else if (hasFocus && (fEditText.getText().length() > 0) && (savedInstanceState == null)) {
// Create a new calendar object
Calendar c = Calendar.getInstance();
// Extract the previously entered FEditText date as a string
String dateStr = fEditText.getText().toString().replace(" ","");
// Split the string date into parts, year, month and day.
String[]dateParts = dateStr.split("/");
// Parse the EditText date here to get year, month and day, and then
// Set the Calendar date in the object to the EditText date.
// Month is zero-based so need to subtract one from it.
c.set(Integer.parseInt(dateParts[2]),Integer.parseInt(dateParts[0])-1,Integer.parseInt(dateParts[1]));
// Now create a bundle to pass the date to the fragment and into the datepicker
Bundle argsbundle = new Bundle();
argsbundle.putInt("year", c.get(Calendar.YEAR));
argsbundle.putInt("month", c.get(Calendar.MONTH));
argsbundle.putInt("day", c.get(Calendar.DAY_OF_MONTH));
// Create a new fragment.
DatePickerFragment newFragment = new DatePickerFragment();
// Set the year, month and day data from the bundle to the fragment.
newFragment.setArguments(argsbundle);
newFragment.show(getSupportFragmentManager(), "datePicker");
}
DatePickerFragment:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
Calendar c;
int year = 0, month = 0, day = 0;
public DatePickerFragment() {
}
@Override
public Dialog onCreateDialog(@NonNull Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceState);
// If the argsbundle from the Activity has data (because the user previously selected a date) then
// set that date in the DatePicker.
if (getArguments() != null) {
c = Calendar.getInstance();
year = getArguments().getInt("year");
month = getArguments().getInt("month");
day = getArguments().getInt("day");
c.set(year, month, day);
} else { // If the DueDate EditText line is empty (no previously selected date by the user then
// set today's date into the DatePicker.
// Calendar class obtains the current date on the device and has fields for
// each of the parts of the date: day, month and year.
c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
}
DatePickerDialog picker = new DatePickerDialog(getActivity(),
this, year, month, day);
picker.getDatePicker().setCalendarViewShown(true);
picker.setTitle("Select a Due Date");
return picker;
}
public void onDateSet(DatePicker view, int year, int month, int day) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month);
calendar.set(Calendar.DAY_OF_MONTH,day);
// Set the selected date into the FEditText line.
EditText txtDate = (EditText) getActivity().getWindow().getDecorView().getRootView().findViewById(R.id.FEditText);
// Format the selected date.
String myFormat = "MM/dd/yy";
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
txtDate.setText(sdf.format(calendar.getTime()));
}