6

갑자기 Android 용 바인딩이 작동을 멈추었습니다. 이제 빌드해야 할 모든 것,이 메시지가 나타납니다.Android Bindings Stopped working

오류 : 'app : compileDevDebugJavaWithJavac'작업에 대한 실행이 실패했습니다. 나는 하나 개의 파일까지 바인딩을 사용 어디

먼저가 내 파일에 오류가있는 경우 컴파일되지 않습니다 바인딩을 제안하고 시도 무엇

java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:Cannot find the getter for attribute 'android:text' with value type java.lang.String on android.widget.EditText. file:C:\path\to\layout\layout.xml loc:85:12 - 96:54 ****\ data binding error ****

, 그래서 모든 레이아웃 파일을 제거 layout.xml. 이 나는

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:text="@{model.name}" /> 

을 가지고 ... 그리고 내가 android:text="@={model.name}" 그것은 이전 오류가 발생 바인딩 양방향을 추가하지만 경우에, 잘 작동합니다.

다음, 나는 다음 새로운 오류가 발생합니다 ...

@InverseBindingAdapter(attribute = "android:text") 
public static String captureEditTextValue(EditText view) { 
    return view.getText().toString(); 
} 

를 추가합니다.

오류 : 'app : compileDevDebugJavaWithJavac'작업에 대한 실행이 실패했습니다.

java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:Could not find event 'android:textAttrChanged' on View type 'android.widget.EditText' file:C:\Users\EdgeTech\AndroidStudioProjects\purse\purse-customer\app\src\main\res\layout\get_phone_layout.xml loc:85:12 - 96:54 ****\ data binding error ****

는 여전히 이전 오류를 제공합니다 ...이

@InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged") 
public static String captureEditTextValue(EditText view) { 
     return view.getText().toString(); 
} 

에 리팩토링, 더 갔다.

내 설정

  • 안드로이드 스튜디오 : 2.3.3
  • Gradle을 빌드 도구 : 2.3.3
+0

양방향 바인딩의 경우, 변수가'String' 인 경우'android : text = "@ = {model.name}"'이 줄이면 충분합니다. 다른 데이터 유형을 사용하는 경우에는 inverse 제본. –

+0

@RaviRupareliya 예. '문자열입니다. – oreofeolurin

+0

그러면 이미 말했듯이 만약'String'이라면'InverseBinding'은 전혀 필요하지 않습니다. –

답변

3

두 가지 방법이 유형 : 예를 들어

ObservableField<T> 

: 을 viewModel.class에

public ObservableField<String> productName = new ObservableField<>(); 

레이아웃.XML :

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:text="@={viewModel.productName}" /> 
2

내가이 필요합니다 생각하지 않는 한 InverseBindingAdapter 제거하십시오 String.

그런 다음 EditText XML 태그에서 android:text="@={model.name} ->android:text="@={`` + model.name}"을 변경하십시오.

+0

그래도 문제가 해결되지 않으면 알려주세요. 나는이 솔루션이 문제를 잘 해결할 수 있도록 Android 2.3 이상 (버그 수정에 대한 최소 지원)에서 실행 중임을 확인합니다. –

1

당신은 단지 변화 할 수 있어야한다 :

@InverseBindingAdapter(attribute = "android:text") 
public static String captureEditTextValue(EditText view) { 
    return view.getText().toString(); 
} 

에 : 바인딩 요구

@InverseBindingAdapter(attribute = "android:text") 
public static String getText(TextView view) { 
    return view.getText().toString(); 
} 
1

감사합니다, 지금

을 작동하고 그러나. 빌드 도구와 SDK 플랫폼 도구를 버전 으로 업그레이드 한 후 다시 작업을 시작했습니다. 그래도 왜 그것이 버전 으로 깨고 있는지 확실하지 않습니다.

제공되는 모든 솔루션을 사용해 보았습니다. 업그레이드하는 데는 아무런 도움이되지 않았지만, 나에게 도움이되는 유일한 해결책이었습니다.