2017-04-20 97 views
3

我想要定義一個全局變量,它是類WebView的變量。在Android中Java的它可以通過寫這Kotlin - 爲WebView定義全局變量

Java進行全局變量

<ClassName> <variableName> 

來容易做,但在科特林我現在面臨的問題與它的聲明。


class MainActivity : AppCompatActivity() { 

var mywebview : WebView //<- This shows Property must be initialized or be abstract 



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

override fun onStart() { 
    super.onStart() 

    mywebview = findViewById(R.id.webViewGyrix) as WebView 

    mywebview.setWebViewClient(object : WebViewClient() { 
     override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { 
      view?.loadUrl(url); 
      return true 
     } 
    }) 
    mywebview.loadUrl("http://www.example.com/") 
} 

回答

4

這表明屬性必須被初始化或抽象

然後,它即初始化爲null。這不是一個最終值,你以後可以改變它:

var mywebview : WebView? = null; 
+0

它表明:空不能是非的價值 - 無類型WebView – Prateekro

+0

查看編輯答案。 –

+0

是的,效果很好。感謝隊友:) – Prateekro

12

您可以使用後期初始化 - 你不必做的WebView可空

lateinit var webView: WebView 
+1

這比接受的答案好得多。只是在分配之前不要訪問它。 – RobCo

+0

@RobCo它表示期待成員聲明 – Prateekro

+0

此外,這表明屬性必須被初始化或是抽象的 – Prateekro

0

一個全局變量,這意味着它不應該被意外覆蓋,所以你應該使用,而不是lazyload它科特林的懶其在第一次調用創建變量,其他電話將只是參考懶加載可變

private val webview:WebView by lazy{ 
    findViewById<WebView>(R.id.webview) 
} 

將要來的onCreate方法

0

下面的代碼之前爲我工作:

val mywebviewURL = "https://www.google.com" 

    override fun onStart() { 
    super.onStart() 

    events_webview.setWebViewClient(object : WebViewClient() { 
     override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { 
      view?.loadUrl(url); 
      return true 
     } 
    }) 
    events_webview.loadUrl(mywebviewURL) 
} 

添加網絡權限的AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>