6

Właśnie moje powiązania z Androidem przestały działać, wszystko, co teraz buduję, otrzymuję tę wiadomość.Wiązania z Androidem przestały działać

Błąd: Wykonanie nie powiodło się dla zadania ": 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 ****

Co Próbowałem

Pierwszy zasugerowano powiązań nie zostanie skompilowany, jeśli istnieją błędy w moich plikach, więc usunięte wszystkie pliki układu, gdzie użyłem wiązania do jednego pliku layout.xml. Nie mam

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

... i to działa dobrze, jednak jeśli dodać wiązania android:text="@={model.name}" rzuca poprzedniego błędu dwukierunkowego.

Następny, dodaję

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

... to rzuca nowe błąd.

Błąd: Wykonanie nie powiodło się dla zadania ": 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 ****

poszedł dalej, byłaby do tego

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

... wciąż daje poprzedni błąd.

Moja konfiguracja

  • Android Studio: 2.3.3
  • Gradle budować Narzędzia: 2.3.3
+0

Jeśli chodzi o wiązanie dwukierunkowe, 'android: text =" @ = {model.name} "' ta linia jest wystarczająca, jeśli twoją zmienną jest 'String', jeśli masz inne typy danych, musisz wykonać odwrotność wiążący. –

+0

@RaviRupareliya tak, to jest ciąg. – oreofeolurin

+0

Następnie, jak już powiedziałem, jeśli jest to "String", "InverseBinding" wcale nie jest potrzebne. –

Odpowiedz

3

Dwukierunkowa wiążących potrzeb tego typu:

ObservableField<T> 

na przykład: w viewModel.class

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

w układzie.xml:

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

Pozbyć się InverseBindingAdapter jak nie wierzę, że jest to konieczne dla Ciąg.

Następnie w tagu XML EditText zmień android:text="@={model.name} ->android:text="@={`` + model.name}".

+0

Proszę dać mi znać, jeśli to nie rozwiąże problemu. Widzę, że używasz Androida 2.3+ (minimalna obsługa poprawki błędu), więc to rozwiązanie może bardzo dobrze rozwiązać problem. –

1

Trzeba tylko być w stanie zmienić:

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

do:

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

Dzięki

Jednak to działa teraz. Zaczęło działać po uaktualnieniu narzędzi do narzędzi budowania i narzędzi SDK do wersji . Nie wiadomo jednak, dlaczego był on łamany przy użyciu wersji .

Próbowałem wszystkich dostarczonych rozwiązań, wszystko bez skutku, uaktualnienie go, było jedynym rozwiązaniem, które zadziałało dla mnie.