Get date from datepicker using dialogfragment

前端 未结 9 861
庸人自扰
庸人自扰 2020-11-28 03:42

I\'m using the google example to insert a datepicker inside my app using a dialogfragment
http://developer.android.com/guide/topics/ui/controls/pickers.html

But

9条回答
  •  萌比男神i
    2020-11-28 04:04

    In case you have to return a result to a Fragment, but not an Activity, here is a complete solution:

    public class DatePickerDialogFragment extends DialogFragment  {
    
        private static final String ARGUMENT_YEAR = "ARGUMENT_YEAR";
        private static final String ARGUMENT_MONTH = "ARGUMENT_MONTH";
        private static final String ARGUMENT_DAY = "ARGUMENT_DAY";
        private DatePickerDialog.OnDateSetListener listener;
    
        private int year;
        private int month;
        private int dayOfMonth;
    
        public static DatePickerDialogFragment newInstance(final int year, final int month, final int dayOfMonth) {
            final DatePickerDialogFragment df = new DatePickerDialogFragment();
            final Bundle args = new Bundle();
            args.putInt(ARGUMENT_YEAR, year);
            args.putInt(ARGUMENT_MONTH, month);
            args.putInt(ARGUMENT_DAY, dayOfMonth);
            df.setArguments(args);
            return df;
        }
    
        @Override
        public void onCreate(@Nullable final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            retrieveArguments();
        }
    
        private void retrieveArguments() {
            final Bundle args = getArguments();
            if (args != null) {
                year = args.getInt(ARGUMENT_YEAR);
                month = args.getInt(ARGUMENT_MONTH);
                dayOfMonth = args.getInt(ARGUMENT_DAY);
            }
        }
    
        @Override
        public Dialog onCreateDialog(final Bundle savedInstanceState) {
            return new DatePickerDialog(getContext(), this.listener, this.year, this.month, this.dayOfMonth);
        }
    
        public void setListener(final DatePickerDialog.OnDateSetListener listener) {
            this.listener = listener;
        }
    }
    

    Then just use it in a Fragment or in an Activity:

    final Calendar c = Calendar.getInstance();
    DatePickerDialogFragment datePicker = DatePickerDialogFragment.newInstance(
            c.get(Calendar.YEAR),
            c.get(Calendar.MONTH),
            c.get(Calendar.DAY_OF_MONTH));
    datePicker.setListener(this);
    datePicker.show(getChildFragmentManager(), null);
    

提交回复
热议问题