首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 註冊監聽器概念解析:以 Button 點擊為例

     編輯:程式設計疑難解答

什麼是監聽器?

**監聽器 (Listener) 是一個實現了特定介面的物件,專門「等待」並「響應」某類事件發生。** 它是「觀察者模式」在 Android 中的具體體現。

Button 點擊監聽器註冊全過程

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包含業務邏輯,被動等待調用

為什麼要「註冊」?

  • 解耦:Button 不需要知道點擊後具體做什麼業務,只負責分發事件。
  • 可替換:可隨時換不同監聽器實現不同行為 (如測試用 Mock 監聽器)。
  • 多播支援:部分事件 (如 addOnLayoutChangeListener) 允許註冊多個監聽器。

常見監聽器類型

  • OnClickListener - 點擊
  • OnLongClickListener - 長按
  • OnTouchListener - 觸摸 (DOWN/MOVE/UP)
  • OnFocusChangeListener - 焦點變化
  • TextWatcher - 文字變化 (EditText)
  • OnItemClickListener - 列表項點擊 (AdapterView)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved