Reputation: 111
i'm starting in Android programming. I have a problem since a few days and i want ask you if you can help me. I want to show a recyclerView with different layouts ,text and image. I have this code ,the first type ,text is working ,but the image not appears.
Thanks.
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
Historias object = mList.get(position);
if (object != null) {
switch (object.getTipoHistoria()) {
case tipo_texto:
((CityViewHolder) holder).mTitle.setText(object.getTexto());
break;
case tipo_imagen:
StorageReference storageRef = storage.getReferenceFromUrl("gs://xx.appspot.com/imagenes/un-gato-bebe-433.jpg");
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
new RetrieveFeedTask().execute(uri.toString());
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
((EventViewHolder) holder).mImage.setImageBitmap(feed);
}
});
break;
}
}
}
Upvotes: 1
Views: 1197
Reputation: 23384
Just remove switch case, as you know when user enters switch statement only 1 case will be executed, so only your set text was getting executed not the image one
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
Historias object = mList.get(position);
holder.mTitle.setText(object.getTexto());
StorageReference storageRef = storage.getReferenceFromUrl("gs://xx.appspot.com/imagenes/un-gato-bebe-433.jpg");
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
new RetrieveFeedTask().execute(uri.toString());
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
holder.mImage.setImageBitmap(feed);
}
});
}
}
}
and i would suggest you to use picasso or glide library to load images ,its super easy to load images
Edit.
just use holder
. instead of ((EventViewHolder) holder)
Upvotes: 1
Reputation: 71
I recommend use special lib for downloading photos from web or sd. Here some:
Picasso.with(context).load("path_to_image").into(imageView);
Glide.with(this).load("path_to_image").into(imageView);
Upvotes: 2