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

时间:2016-07-03 21:21:40

标签: 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
    }
}

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

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 个答案:

答案 0 :(得分: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")
        }
    }
    
  2. MapActivity中正在覆盖的onCreate(android.os.Bundle, android.os.PersistableBundle)方法的文档表明,persistableMode中的AndroidManifest.xml活动需要设置为persistAcrossReboots 1}}它被称为...但是MapActivity是抽象的,所以你需要为它的子类设置属性。在这种情况下,这将是RecordingActivity

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