我有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
有任何建议可以实现这一目标吗?
答案 0 :(得分:0)
让我们从你得到的两条消息开始:
变量'小时/分钟'从内部类中访问,需要 被宣布为最终
从匿名内部类访问的Java中的任何变量都必须声明为final。
无法为最终变量
指定值
您只能为变量赋值一次;你实例化它的时间。您尝试重新分配值,因此您将收到错误消息。
解决方法:有很多方法可以解决这个问题,让我建议更简单的方法。从timePickerDialog()
中删除两个int参数,将它们从内部类外部设置为final Integer[] hourMinute = new Integer[1];
,并在内部类中设置它们的值,如hourMinute [0] = selectedHour;和hourMinute[0]=selectedMinute
。