Kotlin - 为WebView全局定义变量

时间:2017-04-20 13:50:44

标签: android webview kotlin

我正在尝试全局定义一个属于WebView类的变量。在Android Java中,通过编写它可以轻松完成

全局变量的Java

 < ClassName > < variableName >

但在Kotlin,我的声明面临着问题。

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 个答案:

答案 0 :(得分:26)

您可以使用延迟初始化 - 您不必使WebView可以为空

lateinit var webView: WebView

答案 1 :(得分:15)

  

这表明Property必须初始化或是抽象的

然后将其初始化为null。这不是最终值,您可以稍后更改它:

var mywebview : WebView? = null

或者,您可以使用Kotlin的lateinit功能,如果不需要,可以阻止您使用mywebview

lateinit var webView: WebView

答案 2 :(得分:0)

对于一个全局变量,这意味着它不应该被意外覆盖,所以你应该使用kotlin的lazy lazyload它在第一次调用时创建变量,其他调用只会引用延迟加载的变量

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

这应该在onCreate方法

之前

答案 3 :(得分: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"/>