如何全局初始化VideoView? (在onCreate之外)Kotlin

时间:2019-06-25 21:09:45

标签: kotlin

我正在尝试在登录/登录活动中创建视频背景(类似于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?

3 个答案:

答案 0 :(得分:2)

您需要像

那样通过lateinit var定义videoview
lateinit 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检查。