2017-04-06 8 views
1

xmlでKotlin stdlibのメソッドを使用できますか?たとえば、このコードKotlin stdlibとデータバインディング

<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:データバインディングエラーが見つかりました。 **** /データバインディングエラー**** msg:クラスjava.lang.StringのメソッドisNotEmpty()を見つけることができません ファイル:D:\ Projects \ PushTracker-Android \ app \ src \ main \ res \ layout \ fragment_appointment_simple_details.xml LOC:104:44から104:70の **** \データバインディングエラー****

データバインディングは、JavaのString内の方法isNotEmpty()を見つけようとすることは明らかであるが、私はデータバインディングを強制することができますコンパイラはkotlinのStringを使用しますか?

答えて

2

"kotlin's String"は存在しません。 Kotlinの標準ライブラリは、あなたが参照しているメソッドを作成する拡張メソッドを定義します。しかし、データバインディングライブラリはJavaコードを生成する必要があるので、あなたが参照しているメソッドを見つけることができません。あなたは、静的な関数としてであるJavaはそれを呼び出すような方法を使用して、それを呼び出す必要があります、そのメソッドを使用するためには

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

EDIT:このメソッドは、そう、@InlineOnlyと注釈されていますこのメソッドはKotlinコードの外には存在しないかもしれません。

+1

はい、私はこれを試しましたが、 '@InlineOnly'でも貼り付けました。私が理解しているように、唯一の解決策があります。このメソッドを '@ JvmStatic' – dewarder

+1

@Google' @ JvmStatic'を使って定義すると、メソッドを呼び出すことができます。オブジェクトメソッドではなく、ファイルレベルの関数を使用することをお勧めします。 – voddan

関連する問題