From fd0d627569cb250f7060a83161cc845b9616e5a1 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Mon, 17 Aug 2009 00:52:46 -0700 Subject: Fix ExpandableListView context menus when has header views. createContextMenuInfo() should have been subtracting any header views, similar to performItemClick(). Previously, this caused getUnflattenedPos() to return invalid positions. This fixes http://b/issue?id=1778239 --- core/java/android/widget/ExpandableListView.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'core') diff --git a/core/java/android/widget/ExpandableListView.java b/core/java/android/widget/ExpandableListView.java index 5360621..6abb2ae 100644 --- a/core/java/android/widget/ExpandableListView.java +++ b/core/java/android/widget/ExpandableListView.java @@ -33,6 +33,7 @@ import android.view.ContextMenu; import android.view.SoundEffectConstants; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; +import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ExpandableListConnector.PositionMetadata; /** @@ -916,7 +917,14 @@ public class ExpandableListView extends ListView { @Override ContextMenuInfo createContextMenuInfo(View view, int flatListPosition, long id) { - PositionMetadata pm = mConnector.getUnflattenedPos(flatListPosition); + // Adjust for and handle for header views + final int adjustedPosition = flatListPosition - getHeaderViewsCount(); + if (adjustedPosition < 0) { + // Return normal info for header view context menus + return new AdapterContextMenuInfo(view, flatListPosition, id); + } + + PositionMetadata pm = mConnector.getUnflattenedPos(adjustedPosition); ExpandableListPosition pos = pm.position; pm.recycle(); -- cgit v1.1