Imposta l'ID risorsa disegnabile in android: src per ImageView utilizzando l'associazione dei dati in Android

Sto cercando di impostare l'ID risorsa disegnabile in android: src di ImageView utilizzando il binding dei dati

Ecco il mio object:

  • Come aggiungere spazio extra nella parte inferiore di un GridView
  • ascoltatori all'interno di arraysAdapter getView metodo
  • Utilizzo dell'attività della camera in Android
  • Programmaticamente get i dettagli del gateway e della subnet mask
  • Invocare "Maven Project Builder" in Eclipse su Esegui come -> Applicazione Android (o manualmente)
  • righe di allineamento sinistro e destro all'interno di Listview?
  • public class Recipe implements Parcelable { public final int imageResource; // resource ID (eg R.drawable.some_image) public final String title; // ... public Recipe(int imageResource, String title /* ... */) { this.imageResource = imageResource; this.title = title; } // ... } 

    Ecco il mio layout:

     <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <variable name="recipe" type="com.example.android.fivewaystocookeggs.Recipe" /> </data> <!-- ... --> <ImageView android:id="@+id/recipe_image_view" android:layout_width="match_parent" android:layout_height="200dp" android:scaleType="centerCrop" android:src="@{recipe.imageResource}" /> <!-- ... --> </layout> 

    E infine, class di attività:

     // ... public class RecipeActivity extends AppCompatActivity { public static final String RECIPE_PARCELABLE = "recipe_parcelable"; private Recipe mRecipe; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mRecipe = getIntent().getParcelableExtra(RECIPE_PARCELABLE); ActivityRecipeBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_recipe); binding.setRecipe(mRecipe); } // ... } 

    Non visualizza affatto l'image. Che cosa sto facendo di sbagliato?

    BTW, stava lavorando perfettamente con il modo standard:

     @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recipe); final ImageView recipeImageView = (ImageView) findViewById(R.id.recipe_image_view); recipeImageView.setImageResource(mRecipe.imageResource); } 

  • Errore durante l'utilizzo di notifyDataSetChanged in adattatore di arrays android
  • Convertire un path di file in Uri in Android
  • La visualizzazione port in faccia non funziona
  • Programmaticamente l'impostazione dei gps genymotion durante il test causa "SecurityException: nome di pacchetto non valido" quando si imposta la latitudine
  • Adattatore personalizzato, background dell'elemento selezionato
  • La tintura DrawableCompat non funziona sul pre-Lollipop
  • 5 Solutions collect form web for “Imposta l'ID risorsa disegnabile in android: src per ImageView utilizzando l'associazione dei dati in Android”

    Risposta a partire dal 10 novembre 2016

    Il commento di Splash di seguito ha evidenziato che non è necessario utilizzare un tipo di properties; personalizzata (come imageResource ), possiamo invece creare più methods per android:src così:

     public class DataBindingAdatpers { @BindingAdapter("android:src") public static void setImageUri(ImageView view, String imageUri) { if (imageUri == null) { view.setImageURI(null); } else { view.setImageURI(Uri.parse(imageUri)); } } @BindingAdapter("android:src") public static void setImageUri(ImageView view, Uri imageUri) { view.setImageURI(imageUri); } @BindingAdapter("android:src") public static void setImageDrawable(ImageView view, Drawable drawable) { view.setImageDrawable(drawable); } @BindingAdapter("android:src") public static void setImageResource(ImageView imageView, int resource){ imageView.setImageResource(resource); } } 

    Vecchia risposta

    È sempre ansible provare un adattatore:

     public class DataBindingAdatpers { @BindingAdapter("imageResource") public static void setImageResource(ImageView imageView, int resource){ imageView.setImageResource(resource); } } 

    È quindi ansible utilizzare l'adattatore nel tuo xml così

     <ImageView android:id="@+id/recipe_image_view" android:layout_width="match_parent" android:layout_height="200dp" android:scaleType="centerCrop" imageResource="@{recipe.imageResource}" /> 

    Assicurarsi di notare che il nome all'interno del xml corrisponde all'annotazione BindingAdapter (imageResource)

    La class DataBindingAdapters non deve essere dichiarata in nessun posto in particolare, le meccaniche di DataBinding lo troveranno non import (credo)

    definire:

     @BindingAdapter({"android:src"}) public static void setImageViewResource(ImageView imageView, int resource) { imageView.setImageResource(resource); } 

    uso:

     <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:scaleType="center" android:src="@{viewModel.imageRes, default=@drawable/guide_1}"/> 
     public Drawable getImageRes() { return mContext.getResources().getDrawable(R.drawable.icon); } <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="center" android:src="@{viewModel.imageRes}"/> 

    Utilizzo di Fresco (libreria di immagini facebook)

      public class YourCustomBindingAdapters { //app:imageUrl="@{data.imgUri}" @BindingAdapter("bind:imageUrl") public static void loadImage(SimpleDraweeView imageView, String url) { if (url == null) { imageView.setImageURI(Uri.EMPTY); } else { if (url.length() == 0) imageView.setImageURI(Uri.EMPTY); else imageView.setImageURI(Uri.parse(url)); } } } 

    Poiché Kotlin ha messo questo su un file utils di livello superiore, non è necessario un context statico / companion:

     @BindingAdapter("android:src") fun setImageViewResource(view: ImageView, resId : Int) { view.setImageResource(resId) } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.