計算器界面中「刪除」(del) 和「清空」(c) 按鈕點擊無反應,數字/運算符按鈕正常。
代碼中僅對數字鍵、運算符鍵、等號鍵調用了 setOnClickListener(this),**遺漏了 `btn_c` 和 `btn_del`**:
// 缺失的兩行
btn_c.setOnClickListener(this);
btn_del.setOnClickListener(this);
// 數字鍵 0-9
for (int id : new int[]{R.id.btn_0, R.id.btn_1, R.id.btn_2, R.id.btn_3, R.id.btn_4,
R.id.btn_5, R.id.btn_6, R.id.btn_7, R.id.btn_8, R.id.btn_9}) {
findViewById(id).setOnClickListener(this);
}
// 運算符鍵
for (int id : new int[]{R.id.btn_jia, R.id.btn_jian, R.id.btn_cheng, R.id.btn_chu}) {
findViewById(id).setOnClickListener(this);
}
// 功能鍵
findViewById(R.id.btn_dian).setOnClickListener(this);
findViewById(R.id.btn_sum).setOnClickListener(this);
findViewById(R.id.btn_c).setOnClickListener(this); // ← 關鍵補上
findViewById(R.id.btn_del).setOnClickListener(this); // ← 關鍵補上
case R.id.btn_c:
clear_flag = false;
et_input.setText("");
break;
case R.id.btn_del:
if (clear_flag) {
clear_flag = false;
et_input.setText("");
} else {
String str = et_input.getText().toString();
if (!str.isEmpty()) {
et_input.setText(str.substring(0, str.length() - 1));
}
}
break;
appendDigit(), appendOperator(), calculateResult() 降低 onClick 複雜度。+-×÷ 比較,建議統一用 ASCII + - * / 內部計算,顯示時再轉換。// Activity 內
private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding.apply {
setContentView(root)
// 批量設置 clickListener
listOf(btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9,
btnJia, btnJian, btnCheng, btnChu, btnDian, btnSum, btnC, btnDel)
.forEach { it.setOnClickListener(this@MainActivity) }
}
}
**UI 控件必須顯式綁定監聽器才能響應事件**。新手易漏綁定功能鍵,建議用循環/數組批量綁定,配合 ViewBinding 消除樣板代碼。