为何Activity继承会导致功能失效?父子类框架问题咨询
嘿,我来帮你把这个抽象Activity框架的实现捋明白!这种模式在Android开发里用来复用通用初始化逻辑、统一页面规范超实用的,咱们一步步来:
实现抽象父Activity作为子类框架的正确姿势
首先,咱们得把提供框架的ActA改成抽象类,这样它就只能被继承而不能直接实例化,更符合框架模板的定位。下面是完整的代码示例:
抽象父类 ActA(框架基类)
import android.app.Activity; import android.os.Bundle; // 改为抽象类,作为子类的通用框架模板 public abstract class ActA extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 这里写所有子类都需要的通用框架初始化逻辑 // 比如设置全局主题、绑定通用事件、初始化全局工具类等 setupFramework(); // 调用子类必须实现的抽象方法,强制子类完成自身视图初始化 initChildView(); } // 通用框架初始化方法,子类可选择重写扩展 protected void setupFramework() { // 示例:设置全局状态栏样式 // getWindow().setStatusBarColor(getResources().getColor(R.color.global_status_bar)); } // 定义抽象方法,强制子类实现专属的视图/业务初始化逻辑 protected abstract void initChildView(); }
子类 ActB(具体业务页面)
public class ActB extends ActA { @Override protected void initChildView() { // 子类在这里加载自身布局、初始化控件、处理业务逻辑 setContentView(R.layout.activity_b); // 示例:初始化页面专属控件 // Button submitBtn = findViewById(R.id.btn_submit); // submitBtn.setOnClickListener(v -> handleSubmitAction()); } // 如果需要扩展父类的框架逻辑,可重写此方法 @Override protected void setupFramework() { super.setupFramework(); // 必须调用父类方法,保证原有框架逻辑不丢失 // 子类额外的框架定制,比如修改当前页面的状态栏颜色 // getWindow().setStatusBarColor(getResources().getColor(R.color.actb_status_bar)); } }
核心注意点
- 父类
ActA必须是抽象类,避免被直接实例化,只作为模板供子类继承。 - 父类通过抽象方法强制子类实现自身的核心逻辑,避免子类遗漏必要的初始化步骤。
- 子类重写父类方法时,一定要调用
super.xxx(),否则父类的通用框架逻辑会失效。 - 这种模式能大幅减少重复代码,后续修改通用逻辑只需要改动父类,所有子类都会同步生效,维护起来超省心。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

