Kotlin – Defina la variable globalmente para WebView

Estoy tratando de definir una variable global que sea de la class WebView. En Android Java, podría ser fácil hacerlo escribiéndolo

Java para variable global

< ClassName > < variableName > 

Pero en Kotlin estoy enfrentando problemas con su statement.


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

    Esto muestra que la propiedad debe inicializarse o ser abstracta

    Entonces inicialízalo, es decir, null . Este no es un valor final y podrá cambiarlo más tarde:

     var mywebview : WebView? = null; 

    Puede utilizar la initialization tardía: no es necesario que WebView se pueda anular

     lateinit var webView: WebView 

    para una variable global, esto significa que no debe anularse accidentalmente, por lo que en su lugar debe cargarse lazy usando kotlin's lazy, que crea la variable en la primera llamada, otras llamadas solo harán reference a la variable de carga diferida

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

    Eso debería venir antes del método onCreate

    Debajo del código funcionó para mí:

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

    Agregue permiso de Internet a AndroidManifest.xml

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