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