2017-09-27 20 views
-1

以下代碼是來自Kotlin示例項目,我想我總是可以寫sampleVideoView? = findViewById<VideoView>(R.id.videoView),對不對?我可以寫sampleVideoView嗎? =在Kotlin的findViewById <VideoView>(R.id.videoView)?

而更

代碼sampleVideoView?.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE))是等價與if (sampleVideoView!=null){sampleVideoView.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE))},對不對?

class MainActivity : AppCompatActivity(){ 

     private var sampleVideoView: VideoView? = null 

     override fun onCreate(savedInstanceState: Bundle?) { 
      super.onCreate(savedInstanceState) 
      setContentView(R.layout.activity_main) 

      sampleVideoView = findViewById<VideoView>(R.id.videoView) 
      sampleVideoView?.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE)) 
... 

回答

3

sampleVideoView? = findViewById(R.id.videoView)

這是無效的語法。 ?用於將類型標記爲可爲空,並安全地訪問包含這些可空類型的變量。

代碼sampleVideoView?.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE))是等價與IF(sampleVideoView!= NULL){sampleVideoView.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE))},對不對?

是的。但是,如果您有例如val x = y?.getName()變量x將是null或之後包含名稱y。正如您的示例所示,這不僅僅是「僅在!= null」時才這樣做。

+0

謝謝!但我可以寫私人變量sampleVideoView:VideoView? = null,爲什麼我不能寫sampleVideoView? = findViewById(R.id.videoView) – HelloCW

+0

由於'VideoView?'是變量'sampleVideoView'的類型,因此'?'是有效的,並且表示該變量可以是「null」,但不能後綴一個帶'?'的變量名,根本沒有這個語法。只要做'sampleVideoView = findViewById(R.id.videoView)' – s1m0nw1

0

以下是將可爲空的值分配給可爲空的變量的正確語法。你不分配

sampleVideoView = findViewById<VideoView>(R.id.videoView) 

第二條語句是等價

3

您可以在所有忘記findView方法,並與後科特林安卓擴展插件

apply plugin: 'kotlin-android-extensions' 

取代它需要一個問號你可以只寫:

yourVideoViewID.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE))

相關問題