@@ -10,23 +10,37 @@ import dts = require("ui/action-bar");
1010import view = require( "ui/core/view" ) ;
1111
1212const R_ID_HOME = 0x0102002c ;
13-
14- var ACTION_ITEM_ID_OFFSET = 1000 ;
13+ const ACTION_ITEM_ID_OFFSET = 1000 ;
1514
1615global . moduleMerge ( common , exports ) ;
1716
17+ var actionItemIdGenerator = ACTION_ITEM_ID_OFFSET ;
18+ function generateItemId ( ) : number {
19+ actionItemIdGenerator ++ ;
20+ return actionItemIdGenerator ;
21+ }
22+
1823export class ActionItem extends common . ActionItem {
1924 private _androidPosition : dts . AndroidActionItemSettings = {
2025 position : enums . AndroidActionItemPosition . actionBar ,
2126 systemIcon : undefined
2227 } ;
28+ private _itemId ;
29+ constructor ( ) {
30+ super ( ) ;
31+ this . _itemId = generateItemId ( ) ;
32+ }
2333
2434 public get android ( ) : dts . AndroidActionItemSettings {
2535 return this . _androidPosition ;
2636 }
2737 public set android ( value : dts . AndroidActionItemSettings ) {
2838 throw new Error ( "ActionItem.android is read-only" ) ;
2939 }
40+
41+ public _getItemId ( ) {
42+ return this . _itemId ;
43+ }
3044}
3145
3246export class AndroidActionBarSettings implements dts . AndroidActionBarSettings {
@@ -126,14 +140,24 @@ export class ActionBar extends common.ActionBar {
126140 }
127141
128142 public _onAndroidItemSelected ( itemId : number ) : boolean {
129- var menuItem = this . actionItems . getItemAt ( itemId - ACTION_ITEM_ID_OFFSET ) ;
130- if ( menuItem ) {
131- menuItem . _raiseTap ( ) ;
143+ // Handle home button
144+ if ( this . navigationButton && itemId === R_ID_HOME ) {
145+ this . navigationButton . _raiseTap ( ) ;
132146 return true ;
133147 }
148+
149+ // Find item with the right ID;
150+ var menuItem : dts . ActionItem = undefined ;
151+ var items = this . actionItems . getItems ( ) ;
152+ for ( let i = 0 ; i < items . length ; i ++ ) {
153+ if ( ( < ActionItem > items [ i ] ) . _getItemId ( ) === itemId ) {
154+ menuItem = items [ i ] ;
155+ break ;
156+ }
157+ }
134158
135- if ( this . navigationButton && itemId === R_ID_HOME ) {
136- this . navigationButton . _raiseTap ( ) ;
159+ if ( menuItem ) {
160+ menuItem . _raiseTap ( ) ;
137161 return true ;
138162 }
139163
@@ -211,8 +235,8 @@ export class ActionBar extends common.ActionBar {
211235
212236 menu . clear ( ) ;
213237 for ( var i = 0 ; i < items . length ; i ++ ) {
214- var item = items [ i ] ;
215- var menuItem = menu . add ( android . view . Menu . NONE , i + ACTION_ITEM_ID_OFFSET , android . view . Menu . NONE , item . text + "" ) ;
238+ var item = < ActionItem > items [ i ] ;
239+ var menuItem = menu . add ( android . view . Menu . NONE , item . _getItemId ( ) , android . view . Menu . NONE , item . text + "" ) ;
216240
217241 if ( item . android . systemIcon ) {
218242 // Try to look in the system resources.
0 commit comments