From 7becaeea7b220ab6fbe93e35461c7734032e7af4 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Wed, 22 Dec 2010 18:29:32 -0800 Subject: [PATCH] Another stab at fixing issue #3149290 java.lang.RuntimeException:... ...Unable to pause activity {com.android.settings/com.android.settings.applications.StorageUse} Change-Id: Ibfa28a1c5af50dd150dfcafe71e905426d312643 --- core/java/android/widget/AbsListView.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 8e8b830a61a5d..35ef4cb059a31 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -974,8 +974,16 @@ public abstract class AbsListView extends AdapterView implements Te ss.position = getSelectedItemPosition(); ss.firstId = INVALID_POSITION; } else { - if (haveChildren) { - // Remember the position of the first child + if (haveChildren && mFirstPosition > 0) { + // Remember the position of the first child. + // We only do this if we are not currently at the top of + // the list, for two reasons: + // (1) The list may be in the process of becoming empty, in + // which case mItemCount may not be 0, but if we try to + // ask for any information about position 0 we will crash. + // (2) Being "at the top" seems like a special case, anyway, + // and the user wouldn't expect to end up somewhere else when + // they revisit the list even if its content has changed. View v = getChildAt(0); ss.viewTop = v.getTop(); int firstPos = mFirstPosition;