构建TimePickerDialog方法

时间:2015-02-28 20:28:26

标签: android methods datetimepicker

我有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);

我的问题在于这2行:

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

有任何建议可以实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

让我们从你得到的两条消息开始:

  

变量'小时/分钟'从内部类中访问,需要   被宣布为最终

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

  

无法为最终变量

指定值

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

解决方法:有很多方法可以解决这个问题,让我建议更简单的方法。从timePickerDialog()中删除两个int参数,将它们从内部类外部设置为final Integer[] hourMinute = new Integer[1];,并在内部类中设置它们的值,如hourMinute [0] = selectedHour;和hourMinute[0]=selectedMinute