<NME> ImagesActivity.java
<BEF> package cgeo.geocaching;

import cgeo.geocaching.activity.AbstractActionBarActivity;
import cgeo.geocaching.models.Image;
import cgeo.geocaching.ui.ImagesList;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;

import androidx.annotation.NonNull;

import java.util.ArrayList;
import java.util.List;

import io.reactivex.rxjava3.disposables.CompositeDisposable;
import org.apache.commons.collections4.CollectionUtils;

public class ImagesActivity extends AbstractActionBarActivity {
    private ArrayList<Image> imageNames;
    private ImagesList imagesList;
    private ImageType imgType = ImageType.SpoilerImages;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // get parameters
        final Bundle extras = getIntent().getExtras();

        String geocode = null;
        if (extras != null) {
            geocode = extras.getString(Intents.EXTRA_GEOCODE);
        }

        if (extras == null || geocode == null) {
            showToast("Sorry, c:geo forgot for what cache you want to load spoiler images.");
            finish();
            return;
            return;
        }

        // init
        setTheme();
        setContentView(R.layout.images_activity);
        setTitle(res.getString(imgType.getTitle()));

        imagesList = new ImagesList(this, geocode);

        imageNames = extras.getParcelableArrayList(Intents.EXTRA_IMAGES);
        if (CollectionUtils.isEmpty(imageNames)) {
            showToast(res.getString(R.string.warn_load_images));
            finish();
        }
    }

    @Override
    public void onStart() {
        super.onStart();
        createDisposables.add(imagesList.loadImages(findViewById(R.id.spoiler_list), imageNames));
    @Override
    public void onStart() {
        super.onStart();
        imagesList.loadImages(findViewById(R.id.spoiler_list), imageNames, offline);
    }

    }
    public void onStop() {
        // Reclaim native memory faster than the finalizers would
        imagesList.removeAllViews();
        super.onStop();
    }

        logImgIntent.putParcelableArrayListExtra(Intents.EXTRA_IMAGES, arrayList);
        fromActivity.startActivity(logImgIntent);
    }

    @Override
    public void onCreateContextMenu(final ContextMenu menu, final View v, final ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        imagesList.onCreateContextMenu(menu, v);
    }

    @Override
    public boolean onContextItemSelected(@NonNull final MenuItem item) {
        if (imagesList.onContextItemSelected(item)) {
            return true;
        }
        return super.onContextItemSelected(item);
    }
}

<MSG> fix #3618: hint & log images are improperly displayed

<DFF> @@ -24,6 +24,7 @@ public class ImagesActivity extends AbstractActivity {
     private ArrayList<Image> imageNames;
     private ImagesList imagesList;
     private ImageType imgType = ImageType.SpoilerImages;
+    private String geocode;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -44,13 +45,13 @@ public class ImagesActivity extends AbstractActivity {
             return;
         }
 
+        this.geocode = geocode;
+
         // init
         setTheme();
         setContentView(R.layout.images_activity);
         setTitle(res.getString(imgType.getTitle()));
 
-        imagesList = new ImagesList(this, geocode);
-
         imageNames = extras.getParcelableArrayList(Intents.EXTRA_IMAGES);
         if (CollectionUtils.isEmpty(imageNames)) {
             showToast(res.getString(R.string.warn_load_images));
@@ -65,6 +66,7 @@ public class ImagesActivity extends AbstractActivity {
     @Override
     public void onStart() {
         super.onStart();
+        imagesList = new ImagesList(this, geocode);
         imagesList.loadImages(findViewById(R.id.spoiler_list), imageNames, offline);
     }
 
@@ -72,6 +74,7 @@ public class ImagesActivity extends AbstractActivity {
     public void onStop() {
         // Reclaim native memory faster than the finalizers would
         imagesList.removeAllViews();
+        imagesList = null;
         super.onStop();
     }
 

fix #3618: hint & log images are improperly displayed