vih*_*kat 6 kotlin kotlin-interop
我有一个WebView.我想打电话
public void evaluateJavascript(String script, ValueCallback<String> resultCallback)
Run Code Online (Sandbox Code Playgroud)
这种方法.
这是ValueCallback接口:
public interface ValueCallback<T> {
/**
* Invoked when the value is available.
* @param value The value.
*/
public void onReceiveValue(T value);
};
Run Code Online (Sandbox Code Playgroud)
这是我的kotlin代码:
webView.evaluateJavascript("a", ValueCallback<String> {
// cant override function
})
Run Code Online (Sandbox Code Playgroud)
有人想知道在kotlin中覆盖onReceiveValue方法吗?我尝试了"将Java转换为Kotlin",但结果是下一个:
v.evaluateJavascript("e") { }
Run Code Online (Sandbox Code Playgroud)
谢谢!
以下行称为SAM转换:
v.evaluateJavascript("e", { value ->
// Execute onReceiveValue's code
})
Run Code Online (Sandbox Code Playgroud)
每当Java接口只有一个方法时,Kotlin允许您传入lambda而不是实现该接口的对象.
由于lambda是evaluateJavascript函数的最后一个参数,你可以将它移到括号之外,这就是Java to Kotlin转换的作用:
v.evaluateJavascript("e") { value ->
// Execute onReceiveValue's code
}
Run Code Online (Sandbox Code Playgroud)
你已经是.大括号之间的内容是onReceive函数的内容.Kotlin自动处理来自Java的SAM转换.以下所有内容都是等效的.
// Use Kotlin's SAM conversion
webView.evaluateJavascript("a") {
println(it) // "it" is the implicit argument passed in to this function
}
// Use Kotlin's SAM conversion with explicit variable name
webView.evaluateJavascript("a") { value ->
println(value)
}
// Specify SAM conversion explicitly
webView.evalueateJavascript("a", ValueCallback<String>() {
println(it)
})
// Use an anonymous class
webView.evalueateJavascript("a", object : ValueCallback<String>() {
override fun onReceiveValue(value: String) {
println(value)
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6236 次 |
| 最近记录: |