Activity 實現 View.OnClickListener 並重寫 onClick,但按鈕點擊無反應。
**未將監聽器註冊到具體 View**。實現接口僅表示「我有處理能力」,必須顯式調用 button.setOnClickListener(this) 將具體按鈕與監聽器關聯。
public class MainActivity extends Activity implements View.OnClickListener {
private Button btn;
private TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
btn = findViewById(R.id.button1);
txt = findViewById(R.id.textView1);
btn.setOnClickListener(this); // ★ 關鍵:註冊監聽器
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.button1) {
txt.setText("success!!");
}
}
}
// 方式一:switch 判斷 ID
@Override public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_save: save(); break;
case R.id.btn_delete: delete(); break;
case R.id.btn_query: query(); break;
}
}
// 方式二:標記 Tag 區分業務類型
btnSave.setTag("SAVE");
btnDelete.setTag("DELETE");
@Override public void onClick(View v) {
String action = (String) v.getTag();
if ("SAVE".equals(action)) save();
else if ("DELETE".equals(action)) delete();
}
// 方式三:Kotlin 擴展函數 / Lambda (推薦)
btnSave.setOnClickListener { save() }
btnDelete.setOnClickListener { delete() }
findViewById 返回 null → ID 拼寫錯誤或布局未正確 inflate。android:onClick="onClick" → 與代碼註冊衝突,二選一。onViewCreated 註冊,且 v.getId() 需用 R.id.xxx。