2017-10-07 74 views
3

我有一個基底活動像這樣具有抽象方法ABC()科特林的Android基方法不叫

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延伸基地

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

回答

2

您還沒有覆蓋這兩個類中同樣onCreate方法。查看文檔,看起來其中一個或另一個將被調用,具體取決於persistableMode設置爲persistAcrossReboots。這意味着你的Base類中的代碼可能永遠不會被執行,無論你在子類中做什麼。

+0

你能編輯我的代碼嗎?我想我是通過super.onCreate()調用它的。 – coinhndp

+0

使用'onCreate(Bundle)'或'onCreate(Bundle,PersistableBundle)',不要同時使用兩者。我不知道你的用途是什麼,所以我不能給你'正確'的答案。 – Kiskae

+0

這解決了一個完全不相關的問題,我使用了「錯誤的」onCreate簽名 –