Kotlin编写安卓SplashScreen启动屏Activity代码标红如何解决?
问题修复方案
问题根因
你代码里的核心错误是作用域引用错误:你当前在SplashScreen类中编写逻辑,this@MainActivity是不存在的外层类引用,IDE无法识别该作用域,连带后续的MainActivity::class.java也会触发异常标红。
修复步骤
- 第一步:修正Intent的上下文参数
将报错行的this@MainActivity替换为this@SplashScreen,获取当前启动屏Activity的合法Context:
val i = Intent(this@SplashScreen, MainActivity::class.java)
- 第二步(可选,处理残留标红):如果修改上下文后
java仍标红,检查项目Gradle配置- 打开模块级
build.gradle文件,确认plugins块已添加kotlin-android插件:plugins { id 'com.android.application' id 'kotlin-android' } - 确认
dependencies块已引入kotlin标准库:dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" // 其他依赖... } - 点击Android Studio右上角的「Sync Project with Gradle Files」同步配置,再执行「Build → Clean Project → Rebuild Project」清理重建项目即可。
- 打开模块级
优化建议
你使用的无参Handler()构造方法在Android 11及以上版本已被废弃,建议指定主线程Looper避免隐患,修改后的完整代码如下:
package com.example.textnav import android.content.Intent import android.os.Bundle import android.os.Handler import android.os.Looper import androidx.appcompat.app.AppCompatActivity class SplashScreen : AppCompatActivity() { private val SPLASH_TIME_OUT = 3000L override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_splash_screen) Handler(Looper.getMainLooper()).postDelayed( { val i = Intent(this@SplashScreen, MainActivity::class.java) startActivity(i) finish() }, SPLASH_TIME_OUT ) } }
内容的提问来源于stack exchange,提问作者Naceri Anes
相关产品推荐
相关产品推荐

