Null safety
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java
index cff6907..47edf07 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java
@@ -17,12 +17,15 @@
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View rootView = inflater.inflate(layout.extension_circle_fragment, container, false);
-        rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() {
-            @Override public void onClick(View v) { ((ExtensionActivity) ExtensionCircleFragment.this.getActivity()).next(); }
-        });
-        rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() {
-            @Override public void onClick(View v) { ((ExtensionActivity) ExtensionCircleFragment.this.getActivity()).previous(); }
-        });
+        final ExtensionActivity activity = (ExtensionActivity)getActivity();
+        if (activity != null) {
+            rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() {
+                @Override public void onClick(View v) { activity.next(); }
+            });
+            rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() {
+                @Override public void onClick(View v) { activity.previous(); }
+            });
+        }
         SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView);
         imageView.setImage(ImageSource.asset("sanmartino.jpg"));
         return rootView;
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java
index d943fea..5ea1467 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java
@@ -17,9 +17,12 @@
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View rootView = inflater.inflate(layout.extension_freehand_fragment, container, false);
-        rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() {
-            @Override public void onClick(View v) { ((ExtensionActivity) ExtensionFreehandFragment.this.getActivity()).previous(); }
-        });
+        final ExtensionActivity activity = (ExtensionActivity)getActivity();
+        if (activity != null) {
+            rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() {
+                @Override public void onClick(View v) { activity.previous(); }
+            });
+        }
         final FreehandView imageView = rootView.findViewById(id.imageView);
         imageView.setImage(ImageSource.asset("sanmartino.jpg"));
         rootView.findViewById(id.reset).setOnClickListener(new View.OnClickListener() {
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java
index f5231c1..c7f52f1 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java
@@ -18,9 +18,12 @@
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View rootView = inflater.inflate(layout.extension_pin_fragment, container, false);
-        rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() {
-            @Override public void onClick(View v) { ((ExtensionActivity) ExtensionPinFragment.this.getActivity()).next(); }
-        });
+        final ExtensionActivity activity = (ExtensionActivity)getActivity();
+        if (activity != null) {
+            rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() {
+                @Override public void onClick(View v) { activity.next(); }
+            });
+        }
         PinView imageView = rootView.findViewById(id.imageView);
         imageView.setImage(ImageSource.asset("sanmartino.jpg"));
         imageView.setPin(new PointF(1602f, 405f));
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayLargeFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayLargeFragment.java
index 58f923e..70d3445 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayLargeFragment.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayLargeFragment.java
@@ -17,9 +17,12 @@
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View rootView = inflater.inflate(layout.imagedisplay_large_fragment, container, false);
-        rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() {
-            @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayLargeFragment.this.getActivity()).next(); }
-        });
+        final ImageDisplayActivity activity = (ImageDisplayActivity)getActivity();
+        if (activity != null) {
+            rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() {
+                @Override public void onClick(View v) { activity.next(); }
+            });
+        }
         SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView);
         imageView.setImage(ImageSource.asset("card.png"));
         return rootView;
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java
index 5e6b1c8..566e144 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java
@@ -29,9 +29,12 @@
         imageView.setRegionDecoderFactory(new CompatDecoderFactory<ImageRegionDecoder>(SkiaImageRegionDecoder.class, Bitmap.Config.ARGB_8888));
         imageView.setOrientation(SubsamplingScaleImageView.ORIENTATION_90);
         imageView.setImage(ImageSource.asset("card.png").region(new Rect(5200, 651, 8200, 3250)));
-        rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() {
-            @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayRegionFragment.this.getActivity()).previous(); }
-        });
+        final ImageDisplayActivity activity = (ImageDisplayActivity)getActivity();
+        if (activity != null) {
+            rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() {
+                @Override public void onClick(View v) { activity.previous(); }
+            });
+        }
         rootView.findViewById(id.rotate).setOnClickListener(new View.OnClickListener() {
             @Override public void onClick(View v) { imageView.setOrientation((imageView.getOrientation() + 90) % 360); }
         });
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java
index c44627a..46465c4 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java
@@ -20,12 +20,15 @@
         final SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView);
         imageView.setImage(ImageSource.asset("swissroad.jpg"));
         imageView.setOrientation(90);
-        rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() {
-            @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayRotateFragment.this.getActivity()).previous(); }
-        });
-        rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() {
-            @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayRotateFragment.this.getActivity()).next(); }
-        });
+        final ImageDisplayActivity activity = (ImageDisplayActivity)getActivity();
+        if (activity != null) {
+            rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() {
+                @Override public void onClick(View v) { activity.previous(); }
+            });
+            rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() {
+                @Override public void onClick(View v) { activity.next(); }
+            });
+        }
         rootView.findViewById(id.rotate).setOnClickListener(new View.OnClickListener() {
             @Override public void onClick(View v) { imageView.setOrientation((imageView.getOrientation() + 90) % 360); }
         });