【问题标题】:Kotlin Android base method not callKotlin Android 基本方法未调用
【发布时间】:2017-10-07 22:07:34
【问题描述】:

我有一个像这样的基本活动,它有抽象方法 abc()

abstract class Base: AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
        Log.i("abc", "onCreate base")
        abc()
    }

    abstract fun abc()
}

MainActiviy 扩展 Base

class MainActivity : Base() {
    override fun abc() {
        Log.i("abc", "method called from base")
    }

    @Inject
    lateinit var mainPresenter: MainPresenter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.i("abc", "onCreate")

        App.appComponent.plus(MainModule(this)).inject(this)

        button.setOnClickListener {
            mainPresenter.performToast(editText.text.toString())
        }
    }

    fun showToast(string: String) {
        toast(string)
    }
}

当我运行 MainActivity 时,日志只显示“onCreate”。这意味着未调用 Base 的 onCreate 。你能告诉我为什么不调用基本方法吗? 它看起来很傻,但我尝试并没有调用基地 相同的代码在 JAVA 中工作

【问题讨论】:

    标签: java android kotlin


    【解决方案1】:

    您没有在这两个类中覆盖相同的 onCreate 方法。查看文档似乎将调用其中一个或另一个,具体取决于 persistableMode 是否设置为 persistAcrossReboots。这意味着无论您在子类中做什么,Base 类中的代码都可能永远不会被执行。

    【讨论】:

    • 能否请您编辑我的代码。我以为我叫它 super.onCreate()
    • 使用onCreate(Bundle)onCreate(Bundle,PersistableBundle),不要同时使用。我不知道你的预期用途是什么,所以我不能给你“正确”的答案。
    • 这解决了我使用“错误”onCreate 签名时遇到的一个完全不相关的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多