2017-04-06 5 views
1

xml에 Kotlin stdlib의 메서드를 사용할 수 있습니까? ': 응용 프로그램 : compileDevDebugJavaWithJavac의 모범이 코드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}"/> 

실행이 작업에 실패했습니다 생산 컴파일 오류하십시오. 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 개 **** \ 데이터 바인딩 오류 ****

데이터 바인딩은 자바의 문자열에 방법 isNotEmpty()을 찾으려고 시도하는 것이 분명하지만 데이터 바인딩을 강제 할 수 컴파일러가 kotlin의 String을 사용합니까?

답변

2

"kotlin 's String"은 존재하지 않습니다. Kotlin의 표준 라이브러리는 여러분이 참조하고있는 메소드를 생성하기위한 확장 메소드를 정의합니다. 그러나 데이터 바인딩 라이브러리는 Java 코드를 생성해야하므로 참조하는 메소드를 찾을 수 없습니다. 정적 함수로 자바가 호출 할 방법을 사용하여 전화를해야합니다 그 방법을 사용하기 위해

:

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

편집 :이 방법은 너무, @InlineOnly의 주석을 붙일 수 있고 이 메소드는 Kotlin 코드 외부에 존재하지 않을 수도 있습니다.

+1

그래, 나는 이것을 시도했지만'@ InlineOnly'로 찌르다. 내가 이해할 수있는 한가지 해결책이 있습니다 - 일부 메소드에서'@ JvmStatic'을 사용하여이 메소드를 정의하십시오. – dewarder

+1

@Google'@ JvmStatic'은 필요하지 않습니다. 어쨌든 메소드를 호출 할 수 있습니다. 권장되는 방법은 개체 메서드가 아닌 파일 수준 함수를 사용하는 것입니다. – voddan