¿Cómo puedo acceder a una variable de instancia dentro de un BindingAdapter al usar la vinculación de datos de Android?
Así que estoy utilizando este popular código de enlace de datos de código para cargar en la imagen en la vista de la imagen de los elementos de la lista pasando en URL:
<ImageView android:layout_width="match_parent" android:layout_height="150dp"" app:imageUrl="@{movie.imageUrl}" />
El adaptador de encuadernación:
- Métodos estáticos o Singletons rendimiento-sabio (Android)?
- FindViewById dentro de un método estático
- AsyncTask dentro de un método estático - Buena práctica de codificación?
- Eficiencia de Android: importar métodos estáticos o importar la clase
- ¿Cómo comunicarse entre el servicio de mensajería de Firebase y la actividad? Androide
class Movie{ boolean isLoaded; @BindingAdapter({"bind:imageUrl"}) public static void loadImage(final ImageView view, String imageUrl) { Picasso.with(view.getContext()) .load(imageUrl) .into(view, new Callback.EmptyCallback() { @Override public void onSuccess() { //set isLoaded to true for the listview item // but cannot access boolean isLoaded as it is non static. }); }
Si simplemente hago que el BindingAdapter
no estático, entonces lanza error:
java.lang.IllegalStateException: Required DataBindingComponent is null in class MovieTileBinding. A BindingAdapter in com.example.moviesapp.Pojos.Results is not static and requires an object to use, retrieved from the DataBindingComponent. If you don't use an inflation method taking a DataBindingComponent, use DataBindingUtil.setDefaultComponent or make all BindingAdapter methods static.
- Llamar un método de actividad de BroadcastReceiver en Android
- ¿Usando métodos estáticos en Android?
- NetworkOnMainThreadException en IntentService
- ¿Se garantiza que init estática NO se ejecute si no se accede a la clase?
- Acceso a SharedPreferences mediante métodos estáticos
- Android Studio java.lang.NoSuchMethodError con una biblioteca importada
Ponga toda la película instace a través de un adaptador personalizado:
<ImageView android:layout_width="match_parent" android:layout_height="150dp"" app:movie="@{movie}" />
El adaptador de encuadernación:
class Movie{ boolean isLoaded; @BindingAdapter({"movie"}) public static void loadImage(final ImageView view, final Movie movie) { if(movie != null && moview.getImageUrl() != null){ Picasso.with(view.getContext()) .load(movie.getImageUrl()) .into(view, new Callback.EmptyCallback() { @Override public void onSuccess() { image.setLoaded(true); }); } }