Возникла проблема с DatePickerDialog и TimePickerDialog. Пользователь может выбрать дату и время с помощью кнопок «плюс» или «минус». Это работает. Но когда пользователь нажимает на поле, он может установить значение с помощью клавиатуры:Android: DatePickerDialog и TimePickerDialog не проходит выбор
Но это не работает. Когда пользователь вводит новое значение и нажимает кнопку «ОК», значение текущего выбранного поля не будет передано onDateSet
методу. Это не работает ни в DatePickerDialog
, ни в TimePickerDialog
. Вместо этого пользователю нужно щелкнуть зеленую кнопку «вперед» на клавиатуре, чтобы действительно установить значение в DatePickerDialog
. Когда он нажимает «ОК», тогда значение передается, но это довольно идиотское удобство. Никто не сделал бы этого. Это, как я реализую фрагменты:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener
{
private final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@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);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day)
{
final Calendar calendar = Calendar.getInstance(Locale.getDefault());
calendar.set(year, month, day);
String pickedDate = dateFormat.format(calendar.getTime());
((MenuEditActivity)getActivity()).setMenuDate(pickedDate);
}
@Override
public void onCancel(DialogInterface dialog)
{
super.onCancel(dialog);
}
}
ли кто-нибудь есть такая же проблема и уже реализовать некоторые быстрый обходной путь? (Я бы предпочел не переопределять все диалоговые окна Picker, а только эту полузасужденную реализацию).
Ну, я не наблюдаю за поведением, которое вы описываете, но если вы хотите попробовать фокусность с помощью «TimePickerDialog», вы сможете получить «TimePicker», используя метод, аналогичный методу, показанному в [ этот ответ] (http://stackoverflow.com/a/39071972). Вместо этого вы вызываете 'findViewById()' на свой 'TimePickerDialog', используйте' 'timePicker'' вместо' 'ampm_layout'', а возвращаемый' View' должен быть 'TimePicker'. (Очевидно, вы опустите видимость.) Возможно, вам нужно будет сделать это в методе 'onStart()' Fragment', чтобы убедиться, что сначала все было правильно инициализировано правильно. –
@MikeM. Спасибо, теперь он работает (см. Мой обновленный вопрос). Если вы опубликуете его как ответ, я могу его принять. Кстати, это странно. Я уже пробовал что-то подобное вчера, но я всегда получал нуль. Возможно, это было, потому что я не делал этого в 'onStart()'. – Bevor
Нет проблем. Да, у меня была возможность запустить быстрый тест раньше, и он не играл хорошо в 'onCreateDialog()'. Я действительно не исследовал причину, но она отлично работала в 'onStart()'. Anyhoo, ваши флеш-решения намного лучше, чем мое небольшое предложение. Вместо этого вы должны перенести эти изменения в ответ. Однако, спасибо. Цените предложение. Ура! –