Android - How to stop images reloading in Recyclerview when scrolling

You can use .fit() with Picasso. Hope that solves your problem

Picasso.with(persons.get(i).context)
    .load(persons.get(i).photoId)
    .placeholder(R.drawable.placeholder)
    .fit()
    .into(personPhoto);

At first, there is a bug in your code - you have to remove the condition from onBindViewHolder. All ImageView instances has to be updated each time they are about to display.

@Override
public void onBindViewHolder(ViewHolder holder, int position) {            
    String url = images.get(position);               
    ImageLoader.getInstance().displayImage(url, holder.imgView);               
}

The reloading part:

The problem is, that you are probably not using any cache (in-memory, or disk based). I would not elabarote on this a lot, caching of images in collection views is a really common problem and I'm sure a quick StackOverflow search will give you a lot of results.

Just in particular - Universal image does not have caching enabled by default You can turn it on this way.

DisplayImageOptions options = new DisplayImageOptions.Builder()
    ...
    .cacheInMemory(true)
    .cacheOnDisk(true)
    ...
    .build();
ImageLoader.getInstance().displayImage(imageUrl, imageView, options); // Incoming options will be used

Or you can set it globally for your application, just check the docs.