我正在尝试在登录/登录活动中创建视频背景(类似于Spotify和其他应用)。我关注了这段视频https://www.youtube.com/watch?v=WLwQ3SJjWfY
但是我不得不在onCreate中初始化我的视频背景(VideoView),因为我不知道如何全局声明它。
因此,我的onPause和onDestroy方法无法访问它。
我可以在onCreate内以某些方式声明它,但是一旦我全局执行它,就会收到启动错误。
这是我在onCreate中执行此操作的方式,并且工作正常 var videoBG = findViewById(R.id.videoView)
我试图在全球范围内做这些事情:
AMD
我尝试了更多,但我忘了其余的。
var videoBGGlobal:VideoView
var videoBGGlobal = VideoView(this)
var videoBGGlobal: VideoView = VideoView(this)
var videoBGGlobal: VideoView? = VideoView(this)
var videoBGGlobal: VideoView = null as VideoView
var videoBGGlobal = null //and then tried to assign videoBGGlobal =
//videoBG within the onCreate but it says VideoView isn't type Nothing?
答案 0 :(得分:2)
您需要像
那样通过lateinit var定义videoviewlateinit var mVideoView: VideoView
答案 1 :(得分:1)
使用lateinit
保证Kotlin您将在第一次访问变量之前对其进行初始化:
class MainActivity {
private lateinit var videoBGGlobal: VideoView
override fun onCreate() {
super.onCreate()
videoBG = findViewById<VideoView>(R.id.videoView)
}
}
答案 2 :(得分:0)
所有尝试的正确版本是:
var videoBGGlobal: VideoView? = null
但是正如Egor的回答所说,这是lateinit
的用例:
通常,声明为具有非null类型的属性必须在构造函数中初始化。但是,通常这并不方便。例如,可以通过依赖项注入或在单元测试的设置方法中初始化属性。在这种情况下,您不能在构造函数中提供非null的初始值设定项,但在引用类的主体内的属性时仍要避免执行null检查。