Kotlin – 为WebView定义全局变量

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

用于全局变量的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/") } 

这显示属性必须被初始化或是抽象的

然后初始化它即null 。 这不是最终的价值,你可以稍后改变它:

 var mywebview : WebView? = null; 

您可以使用后期初始化 – 您不必使WebView可以为空

 lateinit var webView: WebView 

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

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