錯誤代碼
EditText fr1 = findViewById(R.id.fraction1);
final String s = fr1.getText().toString(); // 在 onCreate 讀取,此時輸入框為空
btn.setOnClickListener(v -> result.setText(s)); // 永遠是空字串
修正:在點擊事件內讀取最新文字
Button btn = findViewById(R.id.getresult);
EditText fr1 = findViewById(R.id.fraction1);
TextView result = findViewById(R.id.result);
btn.setOnClickListener(v -> {
String input = fr1.getText().toString().trim(); // 此時讀取最新輸入
result.setText(input);
});
進階:封裝獲取方法
private String getInputText() {
return fr1.getText().toString().trim();
}
btn.setOnClickListener(v -> result.setText(getInputText()));
常見錯誤模式
| 錯誤 | 正確 |
| 在 onCreate 讀取 EditText 文字存入 final 變數 | 在事件監聽器內即時讀取 |
| 匿名內部類捕獲局部變數需 final,誤以為會自動更新 | Java 閉包捕獲的是變數值,非引用 |