OSDN Git Service

Fix ExpandableListView context menus when has header views.
authorJeff Sharkey <jsharkey@android.com>
Mon, 17 Aug 2009 07:52:46 +0000 (00:52 -0700)
committerJeff Sharkey <jsharkey@android.com>
Mon, 17 Aug 2009 16:53:17 +0000 (09:53 -0700)
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

index 5360621..6abb2ae 100644 (file)
@@ -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();