Как сохранить AM и PM в виджете timePicker после того, как пользователь выбрал один из них?

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

У меня есть виджет timePicker в XML, и я установил для него OnTimeChangedListener. Я получаю пользовательский ввод (часы и минуты, которые я выбираю) и сохраняю их с помощью sharedPreferences, который работает нормально, но timePicker всегда показывает AM, даже если я выбираю PM. Итак, я должен знать, как узнать, какой пользователь выбрал AM или PM, и сохранить его, как я сэкономил час и минуту?

XML виджета timePicker:

<TimePicker
    android:id="@+id/time_picker"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

Java-коды:

// IMPLEMENTATION OF TIME PICKER'S TIME CHANGE EVENT
        timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
            @Override
            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                savedHour = hourOfDay;
                savedMinute = minute;

            }
        });



// IMPLEMENTATION OF SAVE BUTTON
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Boolean isNotification = notificationSwitch.isChecked();
                editor.putBoolean("isNotification", isNotification);
                editor.putInt("saved_hour", savedHour);
                editor.putInt("saved_minute", savedMinute);
                editor.putBoolean("hasTimeSaved", true);
                editor.apply();
                finish();
            }
        });

// CHECK WHETHER TIME HAS BEEN SAVED BY THE USER OR NOT
if (preferences.getBoolean("hasTimeSaved", false)) {
        if (Build.VERSION.SDK_INT >= 23) {
            timePicker.setHour(preferences.getInt("saved_hour", 11));
            timePicker.setMinute(preferences.getInt("saved_minute", 11));
        }else {
            timePicker.setCurrentHour(preferences.getInt("saved_hour", 11));
            timePicker.setCurrentMinute(preferences.getInt("saved_minute", 11));
        }
    }

Я пробовал установить для setIs24Hour значение true, и он работал нормально, но мне не нравился внешний вид моего виджета выбора времени, поэтому я этого не хочу.


person Ari    schedule 05.05.2017    source источник


Ответы (1)


Android TimePicker внутренне 24-часовой, поэтому в OnTimeChangedListener вы должны получить 0 ~ 23. Аналогичным образом, вызов setHour() со значением от 12 до 23 должен отображать PM в средстве выбора времени. Я только что проверил это на своем телефоне, и все работает так, как ожидалось.

person Phạm Nguyễn Hoàng    schedule 05.05.2017
comment
Вот активность: pastebin.com/rycyAYzX Макет — это просто элемент TimePicker. - person Phạm Nguyễn Hoàng; 08.05.2017