Ручной ввод не сохраняется в DatePicker Android (диалог) - PullRequest
4 голосов
/ 29 февраля 2012

Реализовать DatePicker или DatePickerDialog в Android очень просто.Но когда дело доходит до хранения данных, у меня есть проблема с этими классами:

Если вы используете счетчики (+ или -) для изменения даты, все работает нормально.Вызывается событие «Дата изменена» или «Дата установлена», и вы можете получить значения, введенные пользователем.

Но когда год вводится вручную в поле ввода (через клавиатуру) и пользователь затем нажимает кнопку«Сохранить» в диалоговом окне, событие не будет вызываться, и вы не получите это введенное вручную значение.

Это работает, только когда пользователь снова что-то меняет с помощью ползунков после ввода года вручную.Потому что когда вы используете ползунки, события запускаются.

Это нормальное поведение?Как я могу достичь желаемого поведения, а именно, что событие запускается, когда пользователь вводит что-то вручную и затем нажимает «Сохранить»?

Заранее спасибо!

Ответы [ 3 ]

8 голосов
/ 25 января 2013

Просто очистите фокус, и Android установит число из ручного ввода.

Например:

DatePicker datePicker = fidnViewById(R.id.dp);

При сохранении, как onClick(), добавьте datePicker.clearFocus();

Это должно работать.

1 голос
/ 05 августа 2015

У меня была такая же проблема, и принятый ответ мне очень помог. Моя ситуация немного отличается, хотя я использую DatePickerDialog. Вот как DatePicker правильно сработал окончательно.

Сначала объявите переменные, а затем определите их.

private DatePickerDialog.OnDateSetListener date;
private DatePickerDialog mDatePickerDialog;
private Calendar myCalendar;

// Get the calendar instance
myCalendar = Calendar.getInstance();

// Define the date set listener first.
date = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
        // Do something with year, monthOfYear and dayOfMonth
    }
};

// Now define the DatePickerDialog
mDatePickerDialog = new DatePickerDialog(context, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
mDatePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Set", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface arg0, int arg1) {
        DatePicker datePicker = mDatePickerDialog.getDatePicker();

        // The following clear focus did the trick of saving the date while the date is put manually by the edit text.
        datePicker.clearFocus();
        date.onDateSet(datePicker, datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
    }
});

Затем внутри onClick кнопки

mDatePickerDialog.show();
0 голосов
/ 01 марта 2012

Если вы посмотрите на Пример выбора даты , обратный вызов DatePickerDialog.OnDateSetListener будет получен, как только пользователь нажмет кнопку «SET» в диалоговом окне.

Посмотрите на диалоговое окно ниже

enter image description here

Даже если вы введете дату с помощью клавиатуры, сама дата не будет принята, пока вы не нажмете кнопку «SET» в диалоговом окне, и тогда не будет вызван обратный вызов DatePickerDialog.OnDateSetListener.

...