gpt4 book ai didi

Android:是否有解决 SuperNotCalledException 的方法?

转载 作者:太空狗 更新时间:2023-10-29 15:21:00 24 4
gpt4 key购买 nike

我正在尝试重写从 Activity 派生的类(称为 NativeActivity),这样我就可以设置我自己用 Java 创建的内容 View ,同时保留其其余功能。我必须使用 NativeActivity,因为这是在 Xperia Play 上获取触摸板输入的唯一方法。我需要覆盖的方法是 NativeActivity.onCreate() 方法,因为这是设置我不想要的内容 View 的地方。问题是,如果我不在覆盖的 onCreate() 方法中调用 super.onCreate(),则会抛出 SuperNotCalledException。这是来自 Activity 类。但是 Activity.onCreate() 方法所做的只是设置一个 bool 值:

        protected void onCreate(Bundle savedInstanceState) {
mVisibleFromClient = !mWindow
.getWindowStyle()
.getBoolean(
com.android.internal.R.styleable.Window_windowNoDisplay,
false);
mCalled = true;
}

我可以使用 Activity.getWindow() 方法在我自己的代码中进行检查。不幸的是,mCalled bool 值是私有(private)的,所以我不能在我自己的代码中将它设置为 true。我似乎无法弄清楚如何绕过这个要求。有什么想法吗?

最佳答案

当您在 Activity 上覆盖此方法时,您必须调用 super.onCreate(savedInstance)

深入研究代码,这项检查看起来是为了确保任何自定义 Instrumentation 都能正常工作。并且要求在我们所有自定义 Activity 中的某些方法上调用 super 是实现的意外结果。

无需详细说明为什么这是一个糟糕的 OOP 设计,我可以说至少它足够简单,只需调用 super.onCreate(savedInstanceState)你的 onCreate() 方法。从代码中可以看出,没有不良副作用。

关于Android:是否有解决 SuperNotCalledException 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com