2017-04-20 60 views
3

我想要定义一个全局变量,它是类WebView的变量。在Android中Java的它可以通过写这Kotlin - 为WebView定义全局变量

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

回答

4

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

然后,它即初始化为null。这不是一个最终值,你以后可以改变它:

var mywebview : WebView? = null; 
+0

它表明:空不能是非的价值 - 无类型WebView – Prateekro

+0

查看编辑答案。 –

+0

是的,效果很好。感谢队友:) – Prateekro

12

您可以使用后期初始化 - 你不必做的WebView可空

lateinit var webView: WebView 
+1

这比接受的答案好得多。只是在分配之前不要访问它。 – RobCo

+0

@RobCo它表示期待成员声明 – Prateekro

+0

此外,这表明属性必须被初始化或是抽象的 – Prateekro

0

一个全局变量,这意味着它不应该被意外覆盖,所以你应该使用,而不是lazyload它科特林的懒其在第一次调用创建变量,其他电话将只是参考懒加载可变

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

将要来的onCreate方法

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