Skip to content

Commit 99441c4

Browse files
author
Dianne Hackborn
committed
Fix issue #3149290: java.lang.RuntimeException: Unable to pause activity
{com.android.settings/com.android.settings.applications.StorageUse} AbsListView could call mAdapter.getItemId() if a save state happened after the data changed but before a layout occurred. Change-Id: Ica020971dc458dff79b56dd810733e217f4f7da6
1 parent 2bd83c0 commit 99441c4

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

core/java/android/widget/AbsListView.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -963,7 +963,7 @@ public Parcelable onSaveInstanceState() {
963963

964964
SavedState ss = new SavedState(superState);
965965

966-
boolean haveChildren = getChildCount() > 0;
966+
boolean haveChildren = getChildCount() > 0 && mItemCount > 0;
967967
long selectedId = getSelectedItemId();
968968
ss.selectedId = selectedId;
969969
ss.height = getHeight();
@@ -978,8 +978,12 @@ public Parcelable onSaveInstanceState() {
978978
// Remember the position of the first child
979979
View v = getChildAt(0);
980980
ss.viewTop = v.getTop();
981-
ss.position = mFirstPosition;
982-
ss.firstId = mAdapter.getItemId(mFirstPosition);
981+
int firstPos = mFirstPosition;
982+
if (firstPos >= mItemCount) {
983+
firstPos = mItemCount - 1;
984+
}
985+
ss.position = firstPos;
986+
ss.firstId = mAdapter.getItemId(firstPos);
983987
} else {
984988
ss.viewTop = 0;
985989
ss.firstId = INVALID_POSITION;

0 commit comments

Comments
 (0)