2017-04-06 80 views
1

是否可以在xml中使用Kotlin stdlib中的方法?例如該代碼Kotlin stdlib和Databinding

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="16dp" 
    android:textColor="#333333" 
    android:text="@{viewModel.note}" 
    android:visibility="@{viewModel.note.isNotEmpty ? View.VISIBLE : View.GONE}"/> 

產生編譯錯誤

執行失敗的任務 ':應用程序:compileDevDebugJavaWithJavac'。 java.lang.RuntimeException:發現數據綁定錯誤。 ****/data binding error **** msg:無法在類java.lang.String中找到方法isNotEmpty() file:D:\ Projects \ PushTracker -Android \ app \ src \ main \ res \ layout \ fragment_appointment_simple_details.xml LOC:104:44 - 104:70個**** \數據綁定錯誤****

顯而易見的是,數據綁定試圖找到方法isNotEmpty()在Java中的字符串,但我可以強制綁定編譯器使用kotlin的字符串?

回答

2

「kotlin's String」不存在。 Kotlin的標準庫定義了擴展方法來創建您所指的方法。但是由於數據綁定庫需要生成Java代碼,因此無法找到您所指的方法。

爲了使用這種方法,您將需要使用方法的Java會調用它,這是一個靜態函數來調用它:

kotlin.text.StringsKt.isNotEmpty(viewModel.note)

編輯:此方法標註了@InlineOnly,所以此方法可能不存在Kotlin代碼之外。

+1

是的,我試過這個,但也用'@InlineOnly'填充。據我所知,只有一個解決方案 - 用@ JvmStatic'在一些輔助對象中定義這個方法@ – dewarder

+1

@Google'@ JvmStatic'沒有必要,你可以調用這個方法。推薦的方法是使用文件級功能,而不是對象方法。 – voddan