diff --git a/ui/action-bar/action-bar-common.ts b/ui/action-bar/action-bar-common.ts index 3d2412bc5..38d12be7c 100644 --- a/ui/action-bar/action-bar-common.ts +++ b/ui/action-bar/action-bar-common.ts @@ -251,7 +251,7 @@ export class ActionItem extends bindable.Bindable implements dts.ActionItem { "icon", "ActionItem", new dependencyObservable.PropertyMetadata(null, null, ActionItem.onItemChanged)); public static visibilityProperty = new dependencyObservable.Property( - "visibility", "ActionItemBase", new dependencyObservable.PropertyMetadata(enums.Visibility.visible, null, ActionItem.onItemChanged)); + "visibility", "ActionItem", new dependencyObservable.PropertyMetadata(enums.Visibility.visible, null, ActionItem.onItemChanged)); private _actionBar: ActionBar; diff --git a/ui/action-bar/action-bar.android.ts b/ui/action-bar/action-bar.android.ts index 13bc0a141..229124511 100644 --- a/ui/action-bar/action-bar.android.ts +++ b/ui/action-bar/action-bar.android.ts @@ -10,16 +10,26 @@ import dts = require("ui/action-bar"); import view = require("ui/core/view"); const R_ID_HOME = 0x0102002c; - -var ACTION_ITEM_ID_OFFSET = 1000; +const ACTION_ITEM_ID_OFFSET = 1000; global.moduleMerge(common, exports); +var actionItemIdGenerator = ACTION_ITEM_ID_OFFSET; +function generateItemId(): number { + actionItemIdGenerator++; + return actionItemIdGenerator; +} + export class ActionItem extends common.ActionItem { private _androidPosition: dts.AndroidActionItemSettings = { position: enums.AndroidActionItemPosition.actionBar, systemIcon: undefined }; + private _itemId; + constructor() { + super(); + this._itemId = generateItemId(); + } public get android(): dts.AndroidActionItemSettings { return this._androidPosition; @@ -27,6 +37,10 @@ export class ActionItem extends common.ActionItem { public set android(value: dts.AndroidActionItemSettings) { throw new Error("ActionItem.android is read-only"); } + + public _getItemId() { + return this._itemId; + } } export class AndroidActionBarSettings implements dts.AndroidActionBarSettings { @@ -126,16 +140,26 @@ export class ActionBar extends common.ActionBar { } public _onAndroidItemSelected(itemId: number): boolean { - var menuItem = this.actionItems.getItemAt(itemId - ACTION_ITEM_ID_OFFSET); - if (menuItem) { - menuItem._raiseTap(); - return true; - } - + // Handle home button if (this.navigationButton && itemId === R_ID_HOME) { this.navigationButton._raiseTap(); return true; } + + // Find item with the right ID; + var menuItem: dts.ActionItem = undefined; + var items = this.actionItems.getItems(); + for (let i = 0; i < items.length; i++) { + if ((items[i])._getItemId() === itemId) { + menuItem = items[i]; + break; + } + } + + if (menuItem) { + menuItem._raiseTap(); + return true; + } return false; } @@ -211,8 +235,8 @@ export class ActionBar extends common.ActionBar { menu.clear(); for (var i = 0; i < items.length; i++) { - var item = items[i]; - var menuItem = menu.add(android.view.Menu.NONE, i + ACTION_ITEM_ID_OFFSET, android.view.Menu.NONE, item.text + ""); + var item = items[i]; + var menuItem = menu.add(android.view.Menu.NONE, item._getItemId(), android.view.Menu.NONE, item.text + ""); if (item.android.systemIcon) { // Try to look in the system resources. diff --git a/ui/enums/enums.d.ts b/ui/enums/enums.d.ts index ee8f9d5b2..36a370753 100644 --- a/ui/enums/enums.d.ts +++ b/ui/enums/enums.d.ts @@ -359,7 +359,7 @@ */ module NavigationBarVisibility { /** - * NavigationBar will be visible if there if frame backstack canGoBack is true or Page have optionsMenu with menuItems. + * NavigationBar will be visible if there if frame backstack canGoBack is true or if the page Action Bar is not empty. */ export var auto: string;