From 2d43d283fc0f22b08f43c6db4da71031168e7f59 Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Thu, 29 Sep 2011 15:16:16 -0700 Subject: [PATCH] Handle the case of Preference lists that have header views inserted at the top. Without this change, wrong Preference is returned when you select one. Subtract the number of headers from the index before querying the adapter. Needed for: Bug: 5203189 Change-Id: Iba7277789ebbd7e3e9954931b1ea06c7e34f3c15 --- core/java/android/preference/PreferenceScreen.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/java/android/preference/PreferenceScreen.java b/core/java/android/preference/PreferenceScreen.java index dd9dd2562851e..8b9945925da25 100644 --- a/core/java/android/preference/PreferenceScreen.java +++ b/core/java/android/preference/PreferenceScreen.java @@ -26,6 +26,7 @@ import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.view.Window; +import android.widget.AbsListView; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.ListAdapter; @@ -190,9 +191,13 @@ public final class PreferenceScreen extends PreferenceGroup implements AdapterVi } public void onItemClick(AdapterView parent, View view, int position, long id) { + // If the list has headers, subtract them from the index. + if (parent instanceof ListView) { + position -= ((ListView) parent).getHeaderViewsCount(); + } Object item = getRootAdapter().getItem(position); if (!(item instanceof Preference)) return; - + final Preference preference = (Preference) item; preference.performClick(this); }