summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/widget/AbsListView.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 9737a5a9bc07..db4df40a43b5 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -632,6 +632,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
private int mLastAccessibilityScrollEventToIndex;
/**
+ * Track if we are currently attached to a window.
+ */
+ private boolean mIsAttached;
+
+ /**
* Interface definition for a callback to be invoked when the list or grid
* has been scrolled.
*/
@@ -1665,6 +1670,13 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
if (gainFocus && mSelectedPosition < 0 && !isInTouchMode()) {
+ if (!mIsAttached && mAdapter != null) {
+ // Data may have changed while we were detached and it's valid
+ // to change focus while detached. Refresh so we don't die.
+ mDataChanged = true;
+ mOldItemCount = mItemCount;
+ mItemCount = mAdapter.getCount();
+ }
resurrectSelection();
}
}
@@ -2334,6 +2346,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mOldItemCount = mItemCount;
mItemCount = mAdapter.getCount();
}
+ mIsAttached = true;
}
@Override
@@ -2388,6 +2401,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
removeCallbacks(mTouchModeReset);
mTouchModeReset = null;
}
+ mIsAttached = false;
}
@Override