【问题标题】:kotlin 'onCreate' overrides nothingkotlin 'onCreate' 不会覆盖任何内容
【发布时间】:2017-11-01 06:36:12
【问题描述】:

我在我的通用模块 BaseActivity.kt 和 BaseFragment.kt 中使用组件开发。其他模块继承时会出现以下问题

> D:\Android\OneDaily\module_main\src\main\java\com\boco\main\MainActivity.kt
> Error:(7, 24) Unresolved reference: base 
> Error:(9, 22) Unresolved reference: BaseActivity 
> Error:(21, 5) 'onCreate' overrides nothing
> Error:(17, 5) 'getLayoutRes' overrides nothing 
> Error:(22, 15) Unresolved reference: onCreate 
> Error:(27, 22) Unresolved reference: findViewById 
> Error:(42, 34) Unresolved reference: supportFragmentManager
> D:\Android\OneDaily\module_main\src\main\java\com\boco\main\TimelineFragment.kt
> Error:(7, 24) Unresolved reference: base 
> Error:(10, 5) 'getLayoutRes' overrides nothing 
> Error:(9, 26) Unresolved reference: BaseFragment
> Error:(14, 5) 'onCreateView' overrides nothing 
> Error:(15, 22) Unresolved reference: onCreateView

BaseActivity.kt:

abstract class BaseActivity : AppCompatActivity() {  
    init {  
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)  
    }  
    abstract fun getLayoutRes(): Int  
    override fun onCreate(savedInstanceState: Bundle?) {  
        super.onCreate(savedInstanceState)  
        setContentView(getLayoutRes())  
    }  
}  

MainActivity.kt

class MainActivity : BaseActivity() {

    private lateinit var mBottomNav: BottomNavigationView

    private var mFragment1 = TimelineFragment() as Fragment
    private var mFragment2 = TimelineFragment() as Fragment
    private var mFragment3 = TimelineFragment() as Fragment

    override fun getLayoutRes(): Int {
        return R.layout.activity_main
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

    }
}

【问题讨论】:

  • 有助于查看您的代码。
  • 请分享你的代码sn-p
  • 我已经用 Android Studio 3.0 稳定版尝试了你给定的代码,它工作正常。您使用的是相同版本或其他版本的 android studio 吗?
  • 我也在使用 Android Studio 3.0 但我的 MainActivity.kt 是一个继承自模块的 baseActivity.kt。通用模块里面的BaseActivity.kt,module_main里面的MainActivity.kt。不知道你是不是想这样做
  • 迁移到支持库版本 27.0.0 后我看到了同样的错误

标签: android kotlin


【解决方案1】:

上次更新好像有些功能变了, 只需从 Bundle 中删除 '?'

像这样:

override fun onCreate(savedInstanceState: Bundle) {
    super.onCreate(savedInstanceState)
}

【讨论】:

  • 哪个版本可以去掉'?'
  • 另外,如果您在片段中遇到相同的错误,请删除“?”在片段管理器中:片段管理器
  • 这个答案应该被选为最佳答案。帮帮我!
  • 在 Android Studio 3.3 上为我工作,appcompat-v7:28.0.0,compileSdkVersion 28
  • 我使用的是 Android 3.5,并且遇到了与 OP 相同的问题,但对于 onCreateDialog() 而不是 onCreate()。我正在使用来自developer.android.com/guide/topics/ui/dialogs.html#kotlin 的示例,其中没有?在Bundle之后,但添加它修复了它。非常感谢您的建议!
【解决方案2】:

它也可能发生在 Fragment 类中:我发现方法 onCreateView 存在相同的问题;为避免这种情况,只需从 LayoutInflater 参数中删除 ?

像这样:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View?

【讨论】:

    【解决方案3】:

    我必须添加“?”使用 appcompat-v7:27.1.1 时

    implementation "com.android.support:appcompat-v7:27.1.1
    

    override fun onCreate(savedInstanceState : Bundle?){
        super.onCreate(savedInstanceState)
    }
    

    【讨论】:

    • 27.0.2 也为我工作。
    • 是的,否则你会得到“Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState”
    【解决方案4】:

    更新函数签名或将 compileSdk 从 27 恢复到 26

    【讨论】:

      【解决方案5】:

      我已经解决了这个问题。因为它是你没有配置你的通用模块。请在公共模块的 build.gradle 顶部添加两行代码: apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' 希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-05
        • 2019-03-10
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        相关资源
        最近更新 更多