Search code examples
androidandroid-datepicker

correct way of getting selected date from datepickdialog which extends fragment


I am following the android tutorials on DatePickerDialog. I am able to display the datepickerdialog and set the selected date. The way I a msetting the selected date, is by creating a static instance of the EditTextview and accessing it from the DatePickerFragment class. Is this the right way to set the selected date?

public class NewAssignment extends FragmentActivity {
       public static EditText textViewDatePicker;   //static 
protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_assignment);
        textViewDatePicker= (EditText) findViewById(R.id.datePicker);

    }


public void showDatePickerDialog(View v) {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getSupportFragmentManager(), "datePicker");

    }


public static class DatePickerFragment extends DialogFragment implements

DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
         NewAssignment.textViewDatePicker.setText("year: "+year+ "month: "+month+ "day: "+day);
    }
}

Solution

  • Actually, you can create and show DatePickerDialog in your NewAssignment Activity. DataPickerFragment is redurant in this case. Also you can assign OnDateSetListener to your Activity. It can be like this:

     public class NewAssignment extends FragmentActivity implements
            DatePickerDialog.OnDateSetListener {
        private EditText textViewDatePicker;
    
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textViewDatePicker = (EditText) findViewById(R.id.angle_value);
            showDatePickerDialog();
        }
    
    
        public void showDatePickerDialog() {
            final Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);
    
            // Create a new instance of DatePickerDialog and return it
            DatePickerDialog datePickerDialog = new DatePickerDialog(this, this, year, month, day);
    datePickerDialog.show();
        }
    
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            textViewDatePicker.setText("year: " + year + "month: " + monthOfYear + "day: " + dayOfMonth);
        }
    }