我如何保存timePickerDialog中的hourOfDay和分钟,以将其与其他变量进行比较?

时间:2019-01-14 15:29:19

标签: android timepickerdialog

我想从用户输入的TimePickerDialog中获取hourOfDay和分钟,但是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 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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();
        }
    });
}