onCreate在抽象的父活动中没有在kotlin中调用

ale*_*sov 3 android kotlin

我的活动是MapActivity的孩子.

class RecordingActivity : MapActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d("RecirdingActivity", "InitializeMap") //called
    }

    override fun getView(): Int {
        return R.layout.activity_recording
    }
}
Run Code Online (Sandbox Code Playgroud)

我从我的主要活动中调用此活动:

fab.setOnClickListener {
            Log.d("MainActivity", "fabClick") //called
            startActivity(intentFor<RecordingActivity>())
        }
Run Code Online (Sandbox Code Playgroud)

我有抽象的活动:

abstract class MapActivity: AppCompatActivity(), OnMapReadyCallback {

    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
        setContentView(getView())
        initializeMap()
        Log.d("MapActivity", "InitializeMap")//not called
    }
}
Run Code Online (Sandbox Code Playgroud)

本次活动的onCreate方法永远不会被调用

我用调试器跟踪它,我得到了相同的结果.我做错了什么?

Eri*_*ric 8

似乎有两种解决方案:

  1. 也许onCreate你真正想要覆盖的MapActivity是签名onCreate(android.os.Bundle):

    abstract class MapActivity: AppCompatActivity(), OnMapReadyCallback {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(getView())
            initializeMap()
            Log.d("MapActivity", "InitializeMap")
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. onCreate(android.os.Bundle, android.os.PersistableBundle)被覆盖的方法的文档MapActivity表明,persistableMode对于AndroidManifest.xml需要设置的活动,persistAcrossReboots要调用它...但是MapActivity是抽象的,因此您需要为其子类设置属性.在这种情况下,这将是RecordingActivity.

    <?xml version="1.0" encoding="utf-8"?>
    <manifest>
        ...
        <application>
            ...
            <activity
                android:name=".RecordingActivity"
                android:persistableMode="persistAcrossReboots"/>
            ...
        </application>
        ...
    </manifest>
    
    Run Code Online (Sandbox Code Playgroud)