diff options
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/widget/ExpandableListView.java | 27 | 
2 files changed, 26 insertions, 2 deletions
| diff --git a/api/current.txt b/api/current.txt index b88ef3a4626f..212e012be540 100644 --- a/api/current.txt +++ b/api/current.txt @@ -24010,6 +24010,7 @@ package android.widget {      ctor public ExpandableListView(android.content.Context, android.util.AttributeSet, int);      method public boolean collapseGroup(int);      method public boolean expandGroup(int); +    method public boolean expandGroup(int, boolean);      method public android.widget.ExpandableListAdapter getExpandableListAdapter();      method public long getExpandableListPosition(int);      method public int getFlatListPosition(long); diff --git a/core/java/android/widget/ExpandableListView.java b/core/java/android/widget/ExpandableListView.java index f8623686d277..ead9b4f977a9 100644 --- a/core/java/android/widget/ExpandableListView.java +++ b/core/java/android/widget/ExpandableListView.java @@ -599,12 +599,35 @@ public class ExpandableListView extends ListView {       *         was already expanded, this will return false)       */      public boolean expandGroup(int groupPos) { -        boolean retValue = mConnector.expandGroup(groupPos); +       return expandGroup(groupPos, false); +    } + +    /** +     * Expand a group in the grouped list view +     * +     * @param groupPos the group to be expanded +     * @param animate true if the expanding group should be animated in +     * @return True if the group was expanded, false otherwise (if the group +     *         was already expanded, this will return false) +     */ +    public boolean expandGroup(int groupPos, boolean animate) { +        PositionMetadata pm = mConnector.getFlattenedPos(ExpandableListPosition.obtain( +                ExpandableListPosition.GROUP, groupPos, -1, -1)); +        boolean retValue = mConnector.expandGroup(pm);          if (mOnGroupExpandListener != null) {              mOnGroupExpandListener.onGroupExpand(groupPos);          } -         + +        if (animate) { +            final int groupFlatPos = pm.position.flatListPos; + +            final int shiftedGroupPosition = groupFlatPos + getHeaderViewsCount(); +            smoothScrollToPosition(shiftedGroupPosition + mAdapter.getChildrenCount(groupPos), +                    shiftedGroupPosition); +        } +        pm.recycle(); +          return retValue;      } |