Я хотел бы создать массив представлений EditText, а затем назначить OnClickListener только для представлений EditText, относящихся к дате, внутри массива.Слушатель выскакивает DatePickerDialog для ввода пользователем.Код, приведенный ниже:
oEditText = new EditText[oFieldNames.length]; // oFieldNames contains field names like e.g. "Student ID", "Student Name", "Birth Date", "Start Date", "Gender", etc.
for (int i = 0; i < oFieldNames.length; i++) {
oEditText[i] = new EditText(oContext);
...
// code for "Date-related" EditText view:
if (oFieldNames[i].toLowerCase().contains("date") == true) {
oEditText[i].setFocusable(false);
oEditText[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int day = oCalendar.get(Calendar.DAY_OF_MONTH);
int month = oCalendar.get(Calendar.MONTH);
int year = oCalendar.get(Calendar.YEAR);
datePickerDialog = new DatePickerDialog(oContext, new DatePickerDialog.OnDateSetListener(){
@Override
public void onDateSet(DatePicker datePicker, int iYear, int iMonth, int iDay) {
oEditText[i] = (iYear + "/" + (iMonth+1) + "/" + iDay);
}
}, year, month, day); // ERROR here!!!
datePickerDialog.show();
}
});
}
}
Как и ожидалось, появилось сообщение об ошибке, сообщающее, что переменная 'i' доступна во внутреннем классе и должна быть объявлена как "окончательная" .Ну ~ переменная 'i' из coz не должна быть 'final', так как я делаю цикл for с 'i'.Похоже, мне нужно реструктурировать код, создав новый пользовательский класс EditText, но это хлопотно.Любая идея о том, как сделать небольшие изменения, чтобы он мог успешно работать?
Спасибо!