Как инициализировать VideoView глобально?(за пределами создания) Kotlin - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь создать видео-фон в своей активности входа / входа (аналогично Spotify и другим приложениям). Я следил за этим видео, https://www.youtube.com/watch?v=WLwQ3SJjWfY

но мне пришлось инициализировать мой видео фон (VideoView) в моем onCreate, потому что я не мог понять, как сделать его глобальным.

Поэтому мои методы onPause и onDestroy не могут получить к нему доступ.

Я могу объявить это определенным образом внутри моего onCreate, но как только я сделаю это глобально, я получу ошибку инициации.

Вот так я делаю это в моем onCreate, и он отлично работает 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
 }
}

Ответы [ 3 ]

2 голосов
/ 26 июня 2019

вам нужно определить videoview с помощью lateinit var, например

lateinit var mVideoView: VideoView
1 голос
/ 26 июня 2019

Используйте lateinit, чтобы пообещать Kotlin, что вы собираетесь инициализировать переменную перед первым доступом к ней:

class MainActivity {

  private lateinit var videoBGGlobal: VideoView

  override fun onCreate() {
    super.onCreate()
    videoBG = findViewById<VideoView>(R.id.videoView)
  }
}
0 голосов
/ 26 июня 2019

Правильная версия всех ваших попыток:

var videoBGGlobal: VideoView? = null

Но, как говорит ответ Егора, это вариант использования для lateinit:

Обычно свойства, объявленные как имеющие ненулевой тип, должны быть инициализированы в конструкторе.Однако довольно часто это не удобно.Например, свойства могут быть инициализированы посредством внедрения зависимости или в методе настройки модульного теста.В этом случае вы не можете предоставить ненулевой инициализатор в конструкторе, но вы все равно хотите избегать нулевых проверок при обращении к свойству внутри тела класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...