Kotlin- WebView全球定义变量



我正在尝试定义类WebView的全球变量。在Android Java中,可以通过编写IT

来轻松完成

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/")
}

您可以使用较晚的初始化 - 您不必使WebView Nullable

lateinit var webView: WebView

这表明必须初始化属性或抽象

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

var mywebview : WebView? = null

另外,您可以使用Kotlin的Lateinit功能,如果不需要,它可以防止可无效的mywebview

lateinit var webView: WebView

对于全局变量,这意味着它不应偶然覆盖,因此您应该使用Kotlin的Lazy lazyload lazyload lazyload,kotlin的懒惰在第一个呼叫上创建变量,其他呼叫只会引用该变量懒惰的变量

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

应该在OnCreate方法之前

以下代码对我有用:

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)
}

将Internet许可添加到AndroidManifest.xml

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

最新更新