如何在全球初始初始化视频视频?(在爆发之外)Kotlin

  • 本文关键字:视频 爆发 Kotlin 初始化 kotlin
  • 更新时间 :
  • 英文 :


我正在尝试在我的登录/登录活动中创建视频背景(类似于Spotify和其他应用程序(。我遵循此视频,https://www.youtube.com/watch?v=wlwq3sjjwfy

,但我必须在我的创建中初始化我的视频背景(视频(,因为我无法弄清楚如何在全球范围内宣布它。

因此,我的on onpause和ondestroy方法无法访问它。

我可以在我的发电中声明某些方式,但是一旦我在全球范围内都会出现一个启动错误。

这是我在我的创建中进行的方式,而且效果很好 var videobg = findViewById(r.id.videoview(

我尝试在全球范围内做这些:

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?

我尝试了更多,但我忘记了其余的。

package ...
imports ...
class MainActivity {
//Global variables
var videoBGGlobal: VideoView = VideoView(this) //this just doesn't
var mMediaPlayer: MediaPlayer? = MediaPlayer() //this works
var mCurrentVideoPosition: Int? = 0 //this works
override fun onCreate() {
     var videoBG = findViewById<VideoView>(R.id.videoView) //here it //works
     }
 override fun onPause(){
    //need to access videoBGGlobal here
 }
}

使用lateinit保证Kotlin您将在第一次访问该变量之前初始化该变量:

class MainActivity {
  private lateinit var videoBGGlobal: VideoView
  override fun onCreate() {
    super.onCreate()
    videoBG = findViewById<VideoView>(R.id.videoView)
  }
}

您所有尝试的正确版本是:

var videoBGGlobal: VideoView? = null

但是,正如埃格(Egor(的回答所说,这是lateinit的用例:

通常,必须在构造函数中初始化为具有非NULL类型的属性。但是,通常这并不方便。例如,可以通过依赖注入或单位测试的设置方法初始化属性。在这种情况下,您无法在构造函数中提供非零用初始化器,但是在引用类内部的属性时,您仍然需要避免进行无效检查。

您需要通过Lateinit var来定义视频

lateinit var mVideoView: VideoView

最新更新