Как я могу сохранить hourOfDay и минуты из timePickerDialog, чтобы сравнить его с какой-то другой переменной?

1

Я хочу получить hourOfDay и минуты из TimePickerDialog, введенные пользователем, но значения отображаются нулевыми из метода onTimeSet.

       LoadTime.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            calendar = Calendar.getInstance();
            currentHour = calendar.get(Calendar.HOUR_OF_DAY);
            currentMinute = calendar.get(Calendar.MINUTE);
            timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker timePicker, int hourOfDay, int minutes) {
                    if (hourOfDay >= 12) {
                        amPm = "PM";
                    } else {
                        amPm = "AM";
                    }
                    LoadTime.setText(String.format("%02d:%02d", hourOfDay, minutes) + amPm);
                }
            }, currentHour, currentMinute, false);
            Log.d("INT","val: " + hour);
            timePickerDialog.show();
        }
    });

Я хочу сохранить эти две переменные и выполнить некоторые условия if-else. Заранее спасибо.

Теги:

2 ответа

2

вы берете журнал за пределами onTimeSet().

LoadTime.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        calendar = Calendar.getInstance();
        currentHour = calendar.get(Calendar.HOUR_OF_DAY);
        currentMinute = calendar.get(Calendar.MINUTE);
        timePickerDialog = new TimePickerDialog(MainActivity.this, new 
        TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker timePicker, int hourOfDay, int minutes) {
                if (hourOfDay >= 12) {
                    amPm = "PM";
                } else {
                    amPm = "AM";
                }
                 Log.d("INT","val: " + hourOfDay);
                LoadTime.setText(String.format("%02d:%02d", hourOfDay, minutes) + amPm);
            }
        }, currentHour, currentMinute, false);
        timePickerDialog.show();
    }
});'

Чтобы сохранить значение в string, метод Java .valueOf() преобразует значения различных типов в строку. например:

String hourOfDayInString = String.valueOf(hourOfDay);
  • 0
    Простите, сохранение значений в строке не является моим приоритетом. Я взял журнал внутри onTimeSet, и он показал точное значение, но я хочу выполнить дальнейшие операции над этими двумя значениями, так что есть ли способ использовать их вне области.
  • 0
    сделать "hourOfDayInString" как переменную класса и присвоить ей значение в методе onTimeSet (). Вы можете сделать то же самое за минуту.
1

Если я вас правильно понял, вы хотите получить часы дня и минуты.

Если вы получите правильные значения в обратном вызове, есть 3 основные причины, по которым они могут быть неправильными вне его:

  1. Вы переписываете эти значения в другом месте
  2. У вас есть переменные с тем же именем в другой области видимости, поэтому они перегружены
  3. Вы запрашиваете цифры, прежде чем пользователь фактически выберет данные

Вы можете проверить рабочий пример здесь: https://mobikul.com/select-time-using-time-picker-dialog/

И если мы пойдем от вашего примера, пытались ли вы использовать некоторые поля класса для хранения чисел? Как это:

class YourClass {

// Create you variables as class fields
int hourOfDay;
int minutes;

void yourInitMethod() {
    LoadTime.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            calendar = Calendar.getInstance();
            currentHour = calendar.get(Calendar.HOUR_OF_DAY);
            currentMinute = calendar.get(Calendar.MINUTE);
            timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker timePicker, int hourOfDay, int minutes) {

                    // assign field variables
                    this.hourOfDay = hourOfDay;
                    this.minutes = minutes;

                    if (hourOfDay >= 12) {
                        amPm = "PM";
                    } else {
                        amPm = "AM";
                    }
                    LoadTime.setText(String.format("%02d:%02d", hourOfDay, minutes) + amPm);
                }
            }, currentHour, currentMinute, false);

            // This one will show you the hour
            Log.d("INT","val: " + String.valueOf(hourOfDay));
            timePickerDialog.show();
        }
    });
}
  • 0
    Да ты прав. Я хотел использовать hourOfDay и minute в другой области, поэтому я попытался сохранить их в отдельных переменных, но это также не сработало.
  • 0
    Но это буквально невозможно. Вы проверили все 3 пункта, которые могут пойти не так, как я написал? Можете ли вы показать суть всей деятельности?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню