diff a/modules/javafx.controls/src/android/java/javafx/scene/control/skin/TextAreaSkinAndroid.java b/modules/javafx.controls/src/android/java/javafx/scene/control/skin/TextAreaSkinAndroid.java
--- a/modules/javafx.controls/src/android/java/javafx/scene/control/skin/TextAreaSkinAndroid.java
+++ b/modules/javafx.controls/src/android/java/javafx/scene/control/skin/TextAreaSkinAndroid.java
@@ -24,31 +24,60 @@
  */
 
 package javafx.scene.control.skin;
 
 import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
+import javafx.beans.value.WeakChangeListener;
+import javafx.event.EventHandler;
 import javafx.scene.control.TextArea;
-import javafx.scene.control.skin.TextAreaSkin;
+import javafx.scene.input.MouseEvent;
 
 public class TextAreaSkinAndroid extends TextAreaSkin {
 
+    /**************************************************************************
+     *
+     * Private fields
+     *
+     **************************************************************************/
+
+    private final EventHandler<MouseEvent> mouseEventListener = e -> {
+        if (getSkinnable().isEditable() && getSkinnable().isFocused()) {
+            showSoftwareKeyboard();
+        }
+    };
+
+    private final ChangeListener<Boolean> focusChangeListener = (observable, wasFocused, isFocused) -> {
+        if (wasFocused && !isFocused) {
+            hideSoftwareKeyboard();
+        }
+    };
+    private final WeakChangeListener<Boolean> weakFocusChangeListener = new WeakChangeListener<>(focusChangeListener);
+
+    /**************************************************************************
+     *
+     * Constructors
+     *
+     **************************************************************************/
+
     public TextAreaSkinAndroid(final TextArea textArea) {
         super(textArea);
+        textArea.addEventHandler(MouseEvent.MOUSE_CLICKED, mouseEventListener);
+        textArea.focusedProperty().addListener(weakFocusChangeListener);
+    }
+
+    /***************************************************************************
+     *                                                                         *
+     * Public API                                                              *
+     *                                                                         *
+     **************************************************************************/
 
-        textArea.focusedProperty().addListener(new ChangeListener<Boolean>() {
-            public void changed(ObservableValue<? extends Boolean> observable,
-                    Boolean wasFocused, Boolean isFocused) {
-                if (textArea.isEditable()) {
-                    if (isFocused) {
-                        showSoftwareKeyboard();
-                    } else {
-                        hideSoftwareKeyboard();
-                    }
-                }
-            }
-        });
+    /** {@inheritDoc} */
+    @Override public void dispose() {
+        if (getSkinnable() == null) return;
+        getSkinnable().removeEventHandler(MouseEvent.MOUSE_CLICKED, mouseEventListener);
+        getSkinnable().focusedProperty().removeListener(weakFocusChangeListener);
+        super.dispose();
     }
 
     native void showSoftwareKeyboard();
     native void hideSoftwareKeyboard();
 
diff a/modules/javafx.controls/src/android/java/javafx/scene/control/skin/TextFieldSkinAndroid.java b/modules/javafx.controls/src/android/java/javafx/scene/control/skin/TextFieldSkinAndroid.java
--- a/modules/javafx.controls/src/android/java/javafx/scene/control/skin/TextFieldSkinAndroid.java
+++ b/modules/javafx.controls/src/android/java/javafx/scene/control/skin/TextFieldSkinAndroid.java
@@ -24,33 +24,61 @@
  */
 
 package javafx.scene.control.skin;
 
 import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
+import javafx.beans.value.WeakChangeListener;
+import javafx.event.EventHandler;
 import javafx.scene.control.TextField;
-
-import com.sun.javafx.scene.control.behavior.TextFieldBehavior;
-import javafx.scene.control.skin.TextFieldSkin;
+import javafx.scene.input.MouseEvent;
 
 public class TextFieldSkinAndroid extends TextFieldSkin {
 
+    /**************************************************************************
+     *
+     * Private fields
+     *
+     **************************************************************************/
+
+    private final EventHandler<MouseEvent> mouseEventListener = e -> {
+        if (getSkinnable().isEditable() && getSkinnable().isFocused()) {
+            showSoftwareKeyboard();
+        }
+    };
+
+    private final ChangeListener<Boolean> focusChangeListener = (observable, wasFocused, isFocused) -> {
+        if (wasFocused && !isFocused) {
+            hideSoftwareKeyboard();
+        }
+    };
+    private final WeakChangeListener<Boolean> weakFocusChangeListener = new WeakChangeListener<>(focusChangeListener);
+
+    /**************************************************************************
+     *
+     * Constructors
+     *
+     **************************************************************************/
+
     public TextFieldSkinAndroid(final TextField textField) {
         super(textField);
 
-        textField.focusedProperty().addListener(new ChangeListener<Boolean>() {
-            public void changed(ObservableValue<? extends Boolean> observable,
-                    Boolean wasFocused, Boolean isFocused) {
-                if (textField.isEditable()) {
-                    if (isFocused) {
-                        showSoftwareKeyboard();
-                    } else {
-                        hideSoftwareKeyboard();
-                    }
-                }
-            }
-        });
+        textField.addEventHandler(MouseEvent.MOUSE_CLICKED, mouseEventListener);
+        textField.focusedProperty().addListener(weakFocusChangeListener);
+    }
+
+    /***************************************************************************
+     *                                                                         *
+     * Public API                                                              *
+     *                                                                         *
+     **************************************************************************/
+
+    /** {@inheritDoc} */
+    @Override public void dispose() {
+        if (getSkinnable() == null) return;
+        getSkinnable().removeEventHandler(MouseEvent.MOUSE_CLICKED, mouseEventListener);
+        getSkinnable().focusedProperty().removeListener(weakFocusChangeListener);
+        super.dispose();
     }
 
     native void showSoftwareKeyboard();
     native void hideSoftwareKeyboard();
 
