我正在尝试定义类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"/>