FIX: Wrong tap events are fired when there are hidden ActionBarItems

This commit is contained in:
vakrilov
2015-12-04 17:07:26 +02:00
parent 2c4a917af7
commit deb93737a1
3 changed files with 36 additions and 12 deletions

View File

@ -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;

View File

@ -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,14 +140,24 @@ 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();
// Handle home button
if (this.navigationButton && itemId === R_ID_HOME) {
this.navigationButton._raiseTap();
return true;
}
if (this.navigationButton && itemId === R_ID_HOME) {
this.navigationButton._raiseTap();
// 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 ((<ActionItem>items[i])._getItemId() === itemId) {
menuItem = items[i];
break;
}
}
if (menuItem) {
menuItem._raiseTap();
return true;
}
@ -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 = <ActionItem>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.

2
ui/enums/enums.d.ts vendored
View File

@ -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;