diff options
| -rw-r--r-- | core/java/android/widget/AbsListView.java | 14 |
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 |