构建 TimePickerDialog 方法

Building a TimePickerDialog method

我得到了 4 个 EditText 视图,每个视图都有不同的变量。我想在单击每个 EditText 视图时调用 TimePickerDialog 并每次传递相关参数,所以我试图为此构建一个方法而不是编写整个代码 4 次:

public TimePickerDialog timePickerDialog(Context context, final EditText editText, int hour, int minute){
    TimePickerDialog timePicker = new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) {
            hour = selectedHour; // This 2 lines are my problem
            minute = selectedMinute; // This 2 lines are my problem
            editText.setText(selectedHour + ":" + selectedMinute);
            editText.setTextColor(Color.BLACK);
        }
    }, hour, minute, true);

    timePicker.setTitle(R.string.select_time);
    timePicker.show();

    return timePicker;

比起每个 EditText 的 onClick,我调用带有相关参数的方法:

timePickerDialog(getActivity(), mEditText, mHour, mMinute);

我的问题出在这两行:

hour = selectedHour; 
minute = selectedMinute;

我收到错误:

Variable 'hour/minute' is accessed from within inner class, needs to be declared final

将它们更改为 final 时出现此错误:

Cannot assign a value to final variable

有什么建议可以使这成为可能吗?

让我们从您收到的两条消息开始:

Variable 'hour/minute' is accessed from within inner class, needs to be declared final

从匿名内部 class 访问的 Java 中的任何变量都必须声明为最终变量。

Cannot assign a value to final variable

您只能为一个变量赋值一次;你实例化它的时间。您尝试重新分配一个值,因此您将收到一条错误消息。

解决方法:有很多方法可以解决这个问题,让我推荐一个更简单的方法。您从 timePickerDialog() 中删除了两个 int 参数,让它们从内部 class 外部设置为 final Integer[] hourMinute = new Integer[1]; 并从内部 class 内部设置它们的值,例如 hourMinute[0]=选定的时间;和 hourMinute[0]=selectedMinute.