diff options
author | Alan Viverette <alanv@google.com> | 2015-08-26 15:21:39 -0400 |
---|---|---|
committer | Alan Viverette <alanv@google.com> | 2015-08-26 15:22:09 -0400 |
commit | 898c7045e08bdb2209efbccf853a3376fc2070ff (patch) | |
tree | 1c9b5f1f63c48bdd7cd076bbbec31f043ea2a0c2 /core/java/android/widget | |
parent | c04d21fc4ec66d34ca5395db59fadc5e4626bb1c (diff) | |
download | frameworks_base-898c7045e08bdb2209efbccf853a3376fc2070ff.zip frameworks_base-898c7045e08bdb2209efbccf853a3376fc2070ff.tar.gz frameworks_base-898c7045e08bdb2209efbccf853a3376fc2070ff.tar.bz2 |
Avoid NPE when getPositionForView() is called on detached view
Bug: 23557674
Change-Id: I76cb5f06081b2ac4c8f535df8d1a0aee17d2bb20
Diffstat (limited to 'core/java/android/widget')
-rw-r--r-- | core/java/android/widget/AdapterView.java | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java index 6962711..0cc1b25 100644 --- a/core/java/android/widget/AdapterView.java +++ b/core/java/android/widget/AdapterView.java @@ -612,7 +612,7 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup { View listItem = view; try { View v; - while (!(v = (View) listItem.getParent()).equals(this)) { + while ((v = (View) listItem.getParent()) != null && !v.equals(this)) { listItem = v; } } catch (ClassCastException e) { @@ -620,11 +620,13 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup { return INVALID_POSITION; } - // Search the children for the list item - final int childCount = getChildCount(); - for (int i = 0; i < childCount; i++) { - if (getChildAt(i).equals(listItem)) { - return mFirstPosition + i; + if (listItem != null) { + // Search the children for the list item + final int childCount = getChildCount(); + for (int i = 0; i < childCount; i++) { + if (getChildAt(i).equals(listItem)) { + return mFirstPosition + i; + } } } |