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

Activity 繼承導致 Button 失效?子類未正確重寫 onClick 方法

     編輯:程式設計綜合問答

Activity1 繼承 Activity2,導致 Activity2 布局中的 Button 點擊無響應。去掉 Activity1 的 onClick() 後恢復正常,說明方法覆蓋衝突導致父類邏輯被阻斷。

根因分析

Android 中 Activity 繼承鏈遵循標準 Java 多態:

  • 父類 Activity2 定義 onClick(View v) 處理按鈕點擊。
  • 子類 Activity1 重寫(Override)了同名方法,但未調用 super.onClick(v),導致父類邏輯完全被覆蓋,按鈕點擊事件無人處理。

正確修復姿勢

public class Activity1 extends Activity2 {
    @Override
    public void onClick(View v) {
        // 1. 先處理子類特有邏輯
        if (v.getId() == R.id.btn_child) { ... }
        
        // 2. 必須調用父類方法,保證父類按鈕邏輯生效
        super.onClick(v); 
    }
}

最佳實踐建議

  1. 避免在 Activity 繼承鏈中共用 onClick:改用 View.OnClickListener 匿名類/lambda 綁定具體 View,解耦邏輯。
  2. 使用 @Override 註解:編譯期檢測方法簽名是否匹配,防止拼寫錯誤導致「以為重寫實則重載」。
  3. 組合優於繼承:將共用 UI 邏輯提取到 BaseActivity 或 Fragment,通過委託復用,而非強行繼承具體業務 Activity。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved