summaryrefslogtreecommitdiff
path: root/core/java/android/widget/TextView.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/widget/TextView.java')
-rw-r--r--core/java/android/widget/TextView.java17
1 files changed, 14 insertions, 3 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 5743882d5122..2381a785f6cc 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -293,6 +293,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private boolean mPreDrawRegistered;
+ private boolean mPreDrawListenerDetached;
// A flag to prevent repeated movements from escaping the enclosing text view. The idea here is
// that if a user is holding down a movement key to traverse text, we shouldn't also traverse
@@ -4719,6 +4720,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
+ private void unregisterForPreDraw() {
+ getViewTreeObserver().removeOnPreDrawListener(this);
+ mPreDrawRegistered = false;
+ mPreDrawListenerDetached = false;
+ }
+
/**
* {@inheritDoc}
*/
@@ -4770,8 +4777,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mEditor.startSelectionActionMode();
}
- getViewTreeObserver().removeOnPreDrawListener(this);
- mPreDrawRegistered = false;
+ unregisterForPreDraw();
return true;
}
@@ -4783,6 +4789,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mTemporaryDetach = false;
if (mEditor != null) mEditor.onAttachedToWindow();
+
+ if (mPreDrawListenerDetached) {
+ getViewTreeObserver().addOnPreDrawListener(this);
+ mPreDrawListenerDetached = false;
+ }
}
/** @hide */
@@ -4790,7 +4801,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
protected void onDetachedFromWindowInternal() {
if (mPreDrawRegistered) {
getViewTreeObserver().removeOnPreDrawListener(this);
- mPreDrawRegistered = false;
+ mPreDrawListenerDetached = true;
}
resetResolvedDrawables();