如何在单独的类中创建日期/时间选择器并在各种类中使用它?

时间:2016-01-04 10:35:59

标签: android datepicker

我已经在我需要使用它的同一个活动中的各个时间实施了日期/时间选择器。现在我想创建一个单独的类,我可以在任何需要的地方调用该选择器。 谢谢!

1 个答案:

答案 0 :(得分:3)

如果您正在使用Fragments,请使用此类:

public class DatePickerDialogFragment extends DialogFragment {

    private Context context;
    private Calendar MinDate, MaxDate;
    private OnDateSetListener mDateSetListener;


    public DatePickerDialogFragment() {
    }

    public DatePickerDialogFragment(OnDateSetListener callback, Calendar MinDate, Calendar MaxDate, Context context) {
        mDateSetListener = callback;
        this.MinDate = MinDate;
        this.MaxDate = MaxDate;
        this.context = context;
    }
    public DatePickerDialogFragment(OnDateSetListener callback, Context context) {
        mDateSetListener = callback;
        this.context = context;
    }
    DatePickerDialog dd;
    DatePicker dp;

    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Calendar cal = Calendar.getInstance();

        dd = new DatePickerDialog(getActivity(), this.mDateSetListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
        dd.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                try {
                    if (MinDate!=null&&MaxDate!=null) {
                        ((DatePickerDialog) dialog).getDatePicker().setMaxDate(MaxDate.getTimeInMillis());
                        ((DatePickerDialog) dialog).getDatePicker().setMinDate(MinDate.getTimeInMillis());

                    }
                } catch (NullPointerException e) {
                    dialog.dismiss();
                    e.printStackTrace();
                }
            }
        });
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
        return dd;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

}

并使用它:

dialogFragment = new DatePickerDialogFragment(new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                Calendar cal = GregorianCalendar.getInstance();
                cal.set( year, monthOfYear, dayOfMonth);
                String currentDateandTime = sdf.format( cal.getTime());
                et_date.setText(currentDateandTime);
            }
        }, context);

并显示它

dialogFragment.show(getFragmentManager(), "Date");