1818
1919import android .content .Context ;
2020import android .content .res .Resources ;
21+ import android .database .DataSetObserver ;
2122import android .os .Parcelable ;
2223import android .view .KeyEvent ;
2324import android .view .LayoutInflater ;
@@ -286,22 +287,45 @@ public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {
286287 return false ;
287288 }
288289
290+ @ Override
291+ public int getId () {
292+ return 0 ;
293+ }
294+
295+ @ Override
296+ public Parcelable onSaveInstanceState () {
297+ return null ;
298+ }
299+
300+ @ Override
301+ public void onRestoreInstanceState (Parcelable state ) {
302+ }
303+
289304 private class MenuAdapter extends BaseAdapter {
290305 private MenuBuilder mAdapterMenu ;
306+ private int mExpandedIndex = -1 ;
291307
292308 public MenuAdapter (MenuBuilder menu ) {
293309 mAdapterMenu = menu ;
310+ registerDataSetObserver (new ExpandedIndexObserver ());
311+ findExpandedIndex ();
294312 }
295313
296314 public int getCount () {
297315 ArrayList <MenuItemImpl > items = mOverflowOnly ?
298316 mAdapterMenu .getNonActionItems () : mAdapterMenu .getVisibleItems ();
299- return items .size ();
317+ if (mExpandedIndex < 0 ) {
318+ return items .size ();
319+ }
320+ return items .size () - 1 ;
300321 }
301322
302323 public MenuItemImpl getItem (int position ) {
303324 ArrayList <MenuItemImpl > items = mOverflowOnly ?
304325 mAdapterMenu .getNonActionItems () : mAdapterMenu .getVisibleItems ();
326+ if (mExpandedIndex >= 0 && position >= mExpandedIndex ) {
327+ position ++;
328+ }
305329 return items .get (position );
306330 }
307331
@@ -323,19 +347,28 @@ public View getView(int position, View convertView, ViewGroup parent) {
323347 itemView .initialize (getItem (position ), 0 );
324348 return convertView ;
325349 }
326- }
327-
328- @ Override
329- public int getId () {
330- return 0 ;
331- }
332350
333- @ Override
334- public Parcelable onSaveInstanceState () {
335- return null ;
351+ void findExpandedIndex () {
352+ final MenuItemImpl expandedItem = mMenu .getExpandedItem ();
353+ if (expandedItem != null ) {
354+ final ArrayList <MenuItemImpl > items = mMenu .getNonActionItems ();
355+ final int count = items .size ();
356+ for (int i = 0 ; i < count ; i ++) {
357+ final MenuItemImpl item = items .get (i );
358+ if (item == expandedItem ) {
359+ mExpandedIndex = i ;
360+ return ;
361+ }
362+ }
363+ }
364+ mExpandedIndex = -1 ;
365+ }
336366 }
337367
338- @ Override
339- public void onRestoreInstanceState (Parcelable state ) {
368+ private class ExpandedIndexObserver extends DataSetObserver {
369+ @ Override
370+ public void onChanged () {
371+ mAdapter .findExpandedIndex ();
372+ }
340373 }
341374}
0 commit comments