Возврат даты из средства выбора даты Android в метод вызова

Я повторяю список записей даты. Если запись даты не является допустимой датой, я вызываю DatePickerDialog. Чего я не понимаю, так это того, как я могу вернуть выбранную дату вызывающему методу, чтобы я мог ее использовать.

функция вызова:

else {
            Log.i(TAG, "Not a valid date");
            // get actual date
            final Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_WEEK);

            // open date picker
            DatePickerDialog datePickerDialog = new DatePickerDialog(this, this, year, month, day);
            String dateString;
            datePickerDialog.setMessage("Wrong date: " + helpList.get(0));
            datePickerDialog.show();
            // use chosen date
            if (chosenDate.length() > 0) {
                Log.i(TAG, "Date will be set: " + chosenDate);
            }
        }

метод onDateSet:

   @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

    Calendar aCalendar = Calendar.getInstance();
    aCalendar.set(year, monthOfYear, dayOfMonth);
    SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");
    String theDate = formatter.format(aCalendar.getTime());
    Log.i(TAG, "Chosen date formatet: " + theDate);
    chosenDate = theDate;
}

person Cellist    schedule 24.02.2016    source источник
comment
stackoverflow.com/questions/15027454 /   -  person Konstantin Volkov    schedule 24.02.2016


Ответы (1)


Вы можете создать DialogFragment и использовать его в своей деятельности следующим образом:

   DialogFragment newFragment = new DatePickerFragment();
   newFragment.show(getSupportFragmentManager(), "datePicker");

DatePickerFragment должен расширять DialogFragment и может выглядеть так:

public class DatePickerFragment extends DialogFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        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);
        return new DatePickerDialog(getActivity(), dpickerListener, year, month, day);
    }

    private DatePickerDialog.OnDateSetListener dpickerListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            EditText dateEditText = (EditText) getActivity().findViewById(getArguments().getInt("editTextId"));
            GregorianCalendar cal = new GregorianCalendar();
            cal.set(year, monthOfYear, dayOfMonth);
            SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy");
            fmt.setCalendar(cal);
            String dateFormatted = fmt.format(cal.getTime());
            dateEditText.setText(dateFormatted);
            dateEditText.clearFocus();
        }
    };
}

Обратите внимание, как доступ к активности осуществляется через эту строку:

EditText dateEditText = (EditText) getActivity().findViewById(getArguments().getInt("editTextId"));

Таким образом, вы можете реализовать некоторую логику в своей деятельности по вызову. Конечно, вы можете просто вызвать метод в вызывающем действии - что-то вроде этого:

((MyActivity)getActivity()).doSomethingWithData(dateFormatted);
person Krasimir Stoev    schedule 24.02.2016