2017-05-26 10 views
5

मेरे पास एक वेब व्यू है। मैंकोटलिन जावा कॉलबैक इंटरफेस का उपयोग

public void evaluateJavascript(String script, ValueCallback<String> resultCallback) 

पर कॉल करना चाहता हूं।

public interface ValueCallback<T> { 
    /** 
    * Invoked when the value is available. 
    * @param value The value. 
    */ 
    public void onReceiveValue(T value); 
}; 

यहाँ मेरी kotlin कोड है::

webView.evaluateJavascript("a", ValueCallback<String> { 
      // cant override function 
     }) 

किसी को भी विचार kotlin में onReceiveValue विधि ओवरराइड करने के लिए है

यहाँ ValueCallback इंटरफ़ेस है? मैंने कोशिश की "Kotlin जावा कन्वर्ट" लेकिन परिणाम बगल में है:

v.evaluateJavascript("e") { } 

धन्यवाद!

उत्तर

6

निम्न पंक्ति नामक एक SAM conversion है:

v.evaluateJavascript("e", { value -> 
    // Execute onReceiveValue's code 
}) 

जब भी कोई जावा इंटरफ़ेस एक भी विधि है, Kotlin आप एक वस्तु है कि इंटरफ़ेस को लागू करता है के बजाय एक लैम्ब्डा में पारित करने के लिए अनुमति देता है।

के बाद से लैम्ब्डा evaluateJavascript समारोह के अंतिम पैरामीटर है, तो आप इसे कोष्ठक है, जो है क्या जावा Kotlin को रूपांतरण किया के बाहर ले जा सकते हैं:

v.evaluateJavascript("e") { value -> 
    // Execute onReceiveValue's code 
} 
+0

आपको बहुत बहुत धन्यवाद! अच्छा काम करता है – vihkat

4

आप पहले से ही कर रहे हैं। आपके ब्रेसिज़ के बीच की सामग्री onReceive फ़ंक्शन की सामग्री है। कोटलिन ने जावा से एसएएम रूपांतरणों के लिए स्वचालित हैंडलिंग की है। निम्नलिखित सभी समकक्ष हैं।

// 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) 
    } 
}) 
+0

क्या आप निश्चित रूप से उन दो करीबी ब्रैकेट ') 'पदों के बारे में निश्चित हैं? – weston

+3

हां, यह कोटलिन की एक विशेषता है। दस्तावेज़ों से: "कोटलिन में, एक सम्मेलन है कि यदि किसी फ़ंक्शन के लिए अंतिम पैरामीटर एक फ़ंक्शन है, और आप लैम्बडा अभिव्यक्ति को संबंधित तर्क के रूप में पास कर रहे हैं, तो आप इसे कोष्ठक के बाहर निर्दिष्ट कर सकते हैं:" https: // kotlinlang.org/docs/reference/lambdas.html –

+1

यह अच्छा है। महान गहन जवाब। – weston

संबंधित मुद्दे