for(int i=0; i<조건; i++) {}
외부에 있는 for문의 변수를 내부에서 사용하려면 int i 변수가 final 이어야 하는데 변수 i가 계속 바뀌어야 하는 특성이 있어서 final이 붙으면 for문의 특성에 부합되지 않습니다.
for(int i = 0; i < btnNumsIds.length; i++) {
btnNums[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(etNum1.isFocused()) {
etNum1.setText(etNum1.getText().toString() + btnNums[i].getText());
} else if(etNum2.isFocused()) {
etNum2.setText(etNum2.getText().toString() + btnNums[i].getText());
}
}
});
}
위 코드를 보면 onClick 내부에 btnNums[i]의 i에서 오류가 발생합니다.
for문 초기 변수에 final을 붙여줄 수도 없으니 다른 방법을 사용할 필요가 있습니다.
for(int i = 0; i < btnNumsIds.length; i++) {
// 반복문 제어변수 값을 대신 저장할 변수 1개 필요
final int index = i;
btnNums[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(etNum1.isFocused()) {
etNum1.setText(etNum1.getText().toString() + btnNums[index].getText());
} else if(etNum2.isFocused()) {
etNum2.setText(etNum2.getText().toString() + btnNums[index].getText());
}
}
});
}
for문 내부에서 final int index에 for문 초기변수 i를 저장해주고 index라는 변수로 내부에서 사용할 수 있습니다.
'BackEnd > Android' 카테고리의 다른 글
고급 위젯 - 날짜/시간 관련 (0) | 2020.06.16 |
---|---|
그리드 레이아웃으로 계산기 구현하기 (0) | 2020.06.16 |
레이아웃 (0) | 2020.06.12 |
간단한 계산기 구현하기 (0) | 2020.06.08 |
속성 - margin, padding, visibility (0) | 2020.06.07 |