onCreate在抽象的父活动no 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 } } 

我从我的主要活动中调用这个活动:

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

我有抽象活动:

 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 } } 

并且此活动的onCreate方法从不被调用

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

似乎有两个解决方案:

  1. 也许你实际上想要在MapActivity中重写的onCreate(android.os.Bundle)onCreate(android.os.Bundle)的签名:

     abstract class MapActivity: AppCompatActivity(), OnMapReadyCallback { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(getView()) initializeMap() Log.d("MapActivity", "InitializeMap") } } 
  2. MapActivity中重写的onCreate(android.os.Bundle, android.os.PersistableBundle)方法的文档表明,需要将AndroidManifest.xml的activity的persistableMode设置为persistAcrossReboots ,以便调用它。但是MapActivity是抽象的,所以你需要为它的子类设置属性。 在这种情况下,这将是RecordingActivity

     <?xml version="1.0" encoding="utf-8"?> <manifest> ... <application> ... <activity android:name=".RecordingActivity" android:persistableMode="persistAcrossReboots"/> ... </application> ... </manifest>