I saw a kind of a similar unanswered question, but I can't comment and ask questions there and he is having this problem all the time even on a first load: Picasso doesn't load first image of ArrayAdapter
So the problem is: I have an app where I can scroll the GridView endlessly and download movie posters. When I return to the very beginning of the screen - it sometimes doesn't update only first poster and shows some other picture.
I set Targets to the ImageView to keep strong reference. My code is following:
@Override
public View getView(final int position, View view, ViewGroup parent) {
final MovieObject movieObject = getItem(position);
if (view == null) {
view = LayoutInflater.from(getContext()).inflate(R.layout.movie_item, parent, false);
}
final ProgressBar spinner = (ProgressBar) view.findViewById(R.id.movie_item_spinner);
final ImageView poster = (ImageView) view.findViewById(R.id.movie_poster);
// Target to show/hide ProgressBar on ImageView
final Target target = new Target() {
@Override
public void onPrepareLoad(Drawable drawable) {
poster.setBackgroundResource(R.color.white);
spinner.setVisibility(View.VISIBLE);
}
@Override
public void onBitmapLoaded(Bitmap photo, Picasso.LoadedFrom from) {
poster.setBackgroundDrawable(new BitmapDrawable(photo));
spinner.setVisibility(View.GONE);
}
@Override
public void onBitmapFailed(Drawable drawable) {
poster.setBackgroundResource(R.color.white);
}
};
// Save strong reference to be able to show pictures without sliding the screen
poster.setTag(target);
Picasso.with(getContext()).load(movieObject.poster_path).into((Target) poster.getTag());
// If movie doesn't have an image - uses text instead
if (movieObject.poster_path.contains("null"))
{
TextView imageText = (TextView) view.findViewById(R.id.movie_poster_text);
imageText.setText(movieObject.title);
}
poster.setContentDescription(movieObject.title);
return view;
}
How can I solve this problem?
Add: I also tried saving Targets in a MovieObject, I also tried declaring separate class for Target - nothing helped.