diff --git a/DateTimePickerDialog.java b/DateTimePickerDialog.java new file mode 100644 index 0000000..5f4a9cc --- /dev/null +++ b/DateTimePickerDialog.java @@ -0,0 +1,79 @@ +package soc; + +import android.app.DatePickerDialog; +import android.app.Dialog; +import android.app.TimePickerDialog; +import android.os.Bundle; +import android.annotation.NonNull; +import androidx.fragment.app.DialogFragment; +import android.widget.DatePicker; +import android.widget.TimePicker; + +import java.util.Calendar; + +public class DateTimePickerDialog extends DialogFragment + implements DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener { + + private static final String ARG_DATE = "date"; + private Calendar date; + + public static DateTimePickerDialog newInstance(Calendar initialDate) { + DateTimePickerDialog dialog = new DateTimePickerDialog(); + Bundle args = new Bundle(); + args.putSerializable(ARG_DATE, initialDate); + dialog.setArguments(args); + return dialog; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + date = (Calendar) getArguments().getSerializable(ARG_DATE); + } + if (date == null) { + date = Calendar.getInstance(); + } + } + + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + int year = date.get(Calendar.YEAR); + int month = date.get(Calendar.MONTH); + int day = date.get(Calendar.DAY_OF_MONTH); + + // 创建一个新的 DatePickerDialog 实例并返回 + return new DatePickerDialog(requireActivity(), this, year, month, day); + } + + @Override + public void onDateSet(DatePicker view, int year, int month, int day) { + date.set(Calendar.YEAR, year); + date.set(Calendar.MONTH, month); + date.set(Calendar.DAY_OF_MONTH, day); + + int hour = date.get(Calendar.HOUR_OF_DAY); + int minute = date.get(Calendar.MINUTE); + + // 创建新的 TimePickerDialog 实例并显示 + new TimePickerDialog(requireActivity(), this, hour, minute, true).show(); + } + + @Override + public void onTimeSet(TimePicker view, int hourOfDay, int minute) { + date.set(Calendar.HOUR_OF_DAY, hourOfDay); + date.set(Calendar.MINUTE, minute); + + // 通知监听器(如果有的话)关于选定的日期和时间 + if (getTargetFragment() != null && getTargetFragment() instanceof OnDateTimeSetListener) { + ((OnDateTimeSetListener) getTargetFragment()).onDateTimeSet(date); + } else if (getActivity() instanceof OnDateTimeSetListener) { + ((OnDateTimeSetListener) getActivity()).onDateTimeSet(date); + } + } + + public interface OnDateTimeSetListener { + void onDateTimeSet(Calendar date); + } +}