**監聽器 (Listener) 是一個實現了特定介面的物件,專門「等待」並「響應」某類事件發生。** 它是「觀察者模式」在 Android 中的具體體現。
Button btn = findViewById(R.id.my_button);
// 1. 定義一個實現 OnClickListener 介面的物件 (匿名內部類 / Lambda)
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// 事件發生時執行的邏輯
Toast.makeText(this, "按鈕被點擊了", Toast.LENGTH_SHORT).show();
}
};
// 2. 註冊:將 listener 交給 Button 保存
btn.setOnClickListener(listener);
// 內部機制簡化版:
// class Button {
// private OnClickListener mListener;
// public void setOnClickListener(OnClickListener l) { mListener = l; }
// // 觸摸事件分發流程最終會調用:
// // if (mListener != null) mListener.onClick(this);
// }
| 角色 | 對應類/介面 | 職責 |
|---|---|---|
| 事件源 | Button (View) | 事件發生的地方,持有監聽器引用 |
| 事件類 | View (參數 v) | 封裝事件資訊 (座標、時間、源控件等) |
| 監聽器介面 | View.OnClickListener | 定義回調合約:void onClick(View v) |
| 具體監聽器 | 實現介面的類/匿名類/Lambda | 包含業務邏輯,被動等待調用 |
addOnLayoutChangeListener) 允許註冊多個監聽器。OnClickListener - 點擊OnLongClickListener - 長按OnTouchListener - 觸摸 (DOWN/MOVE/UP)OnFocusChangeListener - 焦點變化TextWatcher - 文字變化 (EditText)OnItemClickListener - 列表項點擊 (AdapterView)