2016-02-10 24 views
32

ho seguito i dati di documentazione vincolante per adattatore personalizzato Binding per caricamento delle immagini dal sito Android Developers ufficiale: http://developer.android.com/tools/data-binding/guide.htmlAndroid DataBinding personalizzato Binding adattatore Attenzione

Dopo aver compilato correttamente il codice Ho ricevuto un avviso che è:

Warning:Application namespace for attribute bind:imageUrl will be ignored. 

Il mio codice è il seguente:

@BindingAdapter({"bind:imageUrl"}) 
    public static void loadImage(final ImageView imageView, String url) { 
     imageView.setImageResource(R.drawable.ic_launcher); 
     AppController.getUniversalImageLoaderInstance().displayImage(url, imageView); 
    } 

Perché questo avviso viene generato?

Uno screenshot è anche collegato ... enter image description here

+1

Si sta utilizzando lo stesso spazio dei nomi ' "legare:"' nel vostro layout? – betorcs

risposta

58

credo che lo spazio dei nomi è veramente ignorato nel BindingAdapter annotazione. L'avviso si verifica se si utilizza un prefisso dello spazio dei nomi, indipendentemente dal fatto che corrisponda a quello utilizzato nel layout o meno. Se si omette lo spazio dei nomi, in questo modo:

@BindingAdapter({"imageUrl"}) 

... l'avviso non si verifica.

Sospetto che l'avviso esista per avvisarci che lo spazio dei nomi viene rimosso prima che la stringa venga utilizzata come chiave nell'implementazione dell'annotazione. Il che ha senso quando si considera che i layout sono liberi di dichiarare qualsiasi spazio dei nomi che desiderano, ad es. app: o bind: o foo: e l'annotazione deve funzionare in tutti questi casi.

+1

Nota che lo spazio dei nomi 'android:' è l'unica eccezione: se imposti un 'BindingAdapter' per un attributo built-in come' android: onClick', puoi includere il prefisso e non riceverai alcun avviso. –

1

Prova questo, lavora per me !. Spero che ciò possa aiutarti. Un modo semplice per cambiare la risorsa immagine senza adattatore di associazione.

<ImageButton 
     ... 
     android:id="@+id/btnClick" 
     android:onClick="@{viewModel::onClickImageButton}" 
     android:src="@{viewModel.imageButton}" /> 

e Vista Modello Classe:

public ObservableField<Drawable> imageButton; 
private Context context; 

//Constructor 
public MainVM(Context context) { 
    this.context = context; 
    imageButton = new ObservableField<>(); 
    setImageButton(R.mipmap.image_default); //set image default 
} 

public void onClickImageButton(View view) { 
    setImageButton(R.mipmap.image_change); //change image 
} 

private void setImageButton(@DrawableRes int resId){ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     imageButton.set(context.getDrawable(resId)); 
    }else{ 
     imageButton.set(context.getResources().getDrawable(resId)); 
    } 
} 
Problemi correlati