2016-12-06 45 views
6

Jestem całkiem nowy w Android Data Binding. Postępuję zgodnie z tym samouczkiem: Data Binding Library. Próbuję wykonać adapter, który odbiera wiele parametrów. To jest mój kod:Adapter powiązania z systemem Android przekazuje wiele argumentów powodujących błąd

XML

<ImageView 
      android:layout_width="@dimen/place_holder_size" 
      android:layout_height="@dimen/place_holder_size" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentTop="true" 
      android:layout_centerVertical="true" 
      app:url="@{image.imageUrl}" 
      app:size="@{@dimen/place_holder_size}" 
      /> 

WIĄZANIA ADAPTER CLASS

public class ViewBindingAdapters extends BaseObservable { 

@BindingAdapter({"bind:url", "bind:size"}) 
public static void loadImage(ImageView imageView, String url, int size) { 
    if (!Strings.isNullOrEmpty(url)) { 
     Picasso.with(imageView.getContext()).load(url).resize(size, size).centerCrop().into(imageView); 
    } 
} 
.... 


} 

Ale ja dostaję ten błąd:

java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:Cannot find the setter for attribute 'app:url' with parameter type java.lang.String on android.widget.ImageView. file:... li_image_item.xml loc:30:27 - 30:40 ****\ data binding error ****

Czy ktoś wie dlaczego? ?

Z góry dziękuję!

+0

jaki jest typ danych 'image.imageUrl'? –

+0

To jest ciąg znaków. – IrApp

+0

"bind: url", "bind: size"! = App: url, app: size – pskink

Odpowiedz

10

Problem jest @dimen/place_holder_size, zwraca float podczas łapania go jako int

zmianą, którą BindingAdapter metoda do tego

@BindingAdapter({"bind:url", "bind:size"}) 
public static void loadImage(ImageView imageView, String url, float size) { 

} 

można odnieść this

+2

OMG !! Jesteś całkowicie poprawne. Wielkie dzięki! Działa jak urok :) – IrApp

2

spróbować

@BindingAdapter(value={"url", "size"}, requireAll=false) 
public static void loadImage(ImageView imageView, String url, int size) { 
     if (!Strings.isNullOrEmpty(url)) { 
      Picasso.with(imageView.getContext()).load(url).resize(size, size).centerCrop().into(imageView); 
     } 
    } 
+0

Nadal dostaję ten sam błąd :( – IrApp

+0

po prostu wyczyść i odbuduj projekt bcoz kiedyś studio nie aktualizuj go nadal nie działa spróbuj z nieprawidłowymi przerwami lub uruchom ponownie IDE (może być głupie bt to działa kiedyś) – Nas