Ich versuche, in meiner Anmelde- / Anmeldeaktivität einen Videohintergrund zu erstellen (ähnlich wie bei Spotify und anderen Apps). Ich habe dieses Video verfolgt: https://www.youtube.com/watch?v=WLwQ3SJjWfY

Ich musste jedoch meinen Videohintergrund (VideoView) in meinem onCreate initialisieren, da ich nicht herausfinden konnte, wie ich ihn global deklarieren soll.

Daher können meine Methoden onPause und onDestroy nicht darauf zugreifen.

Ich kann es in meinem onCreate auf bestimmte Weise deklarieren, aber sobald ich es global mache, erhalte ich einen Initiierungsfehler.

Dies ist die Art und Weise, wie ich es in meinem onCreate mache und es funktioniert gut var videoBG = findViewById (R.id.videoView)

Ich habe versucht, dies global zu tun:

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?

Und ich habe mehr versucht, aber den Rest vergessen.

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
 }
}
0
cholguin 26 Juni 2019 im 00:09

3 Antworten

Beste Antwort

Verwenden Sie lateinit, um Kotlin zu versprechen, dass Sie die Variable initialisieren werden, bevor Sie zum ersten Mal darauf zugreifen:

class MainActivity {

  private lateinit var videoBGGlobal: VideoView

  override fun onCreate() {
    super.onCreate()
    videoBG = findViewById<VideoView>(R.id.videoView)
  }
}
1
Egor 26 Juni 2019 im 01:54

Sie müssen Videoview von lateinit var like definieren

lateinit var mVideoView: VideoView
2
Rahul ShaRma 26 Juni 2019 im 08:26

Die richtige Version aller Ihrer Versuche lautet:

var videoBGGlobal: VideoView? = null

Aber wie Egors Antwort sagt, ist dies der Anwendungsfall für lateinit:

Normalerweise müssen Eigenschaften, die als Nicht-Null-Typ deklariert sind, im Konstruktor initialisiert werden. Dies ist jedoch ziemlich oft nicht bequem. Beispielsweise können Eigenschaften durch Abhängigkeitsinjektion oder in der Einrichtungsmethode eines Komponententests initialisiert werden. In diesem Fall können Sie im Konstruktor keinen Initialisierer ungleich Null angeben, möchten jedoch weiterhin Nullprüfungen vermeiden, wenn Sie auf die Eigenschaft im Hauptteil einer Klasse verweisen.

0
Alexey Romanov 26 Juni 2019 im 05:27