mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-15 19:26:42 +08:00
FIX: Wrong tap events are fired when there are hidden ActionBarItems
This commit is contained in:
@ -251,7 +251,7 @@ export class ActionItem extends bindable.Bindable implements dts.ActionItem {
|
|||||||
"icon", "ActionItem", new dependencyObservable.PropertyMetadata(null, null, ActionItem.onItemChanged));
|
"icon", "ActionItem", new dependencyObservable.PropertyMetadata(null, null, ActionItem.onItemChanged));
|
||||||
|
|
||||||
public static visibilityProperty = new dependencyObservable.Property(
|
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;
|
private _actionBar: ActionBar;
|
||||||
|
|
||||||
|
@ -10,16 +10,26 @@ import dts = require("ui/action-bar");
|
|||||||
import view = require("ui/core/view");
|
import view = require("ui/core/view");
|
||||||
|
|
||||||
const R_ID_HOME = 0x0102002c;
|
const R_ID_HOME = 0x0102002c;
|
||||||
|
const ACTION_ITEM_ID_OFFSET = 1000;
|
||||||
var ACTION_ITEM_ID_OFFSET = 1000;
|
|
||||||
|
|
||||||
global.moduleMerge(common, exports);
|
global.moduleMerge(common, exports);
|
||||||
|
|
||||||
|
var actionItemIdGenerator = ACTION_ITEM_ID_OFFSET;
|
||||||
|
function generateItemId(): number {
|
||||||
|
actionItemIdGenerator++;
|
||||||
|
return actionItemIdGenerator;
|
||||||
|
}
|
||||||
|
|
||||||
export class ActionItem extends common.ActionItem {
|
export class ActionItem extends common.ActionItem {
|
||||||
private _androidPosition: dts.AndroidActionItemSettings = {
|
private _androidPosition: dts.AndroidActionItemSettings = {
|
||||||
position: enums.AndroidActionItemPosition.actionBar,
|
position: enums.AndroidActionItemPosition.actionBar,
|
||||||
systemIcon: undefined
|
systemIcon: undefined
|
||||||
};
|
};
|
||||||
|
private _itemId;
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this._itemId = generateItemId();
|
||||||
|
}
|
||||||
|
|
||||||
public get android(): dts.AndroidActionItemSettings {
|
public get android(): dts.AndroidActionItemSettings {
|
||||||
return this._androidPosition;
|
return this._androidPosition;
|
||||||
@ -27,6 +37,10 @@ export class ActionItem extends common.ActionItem {
|
|||||||
public set android(value: dts.AndroidActionItemSettings) {
|
public set android(value: dts.AndroidActionItemSettings) {
|
||||||
throw new Error("ActionItem.android is read-only");
|
throw new Error("ActionItem.android is read-only");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public _getItemId() {
|
||||||
|
return this._itemId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class AndroidActionBarSettings implements dts.AndroidActionBarSettings {
|
export class AndroidActionBarSettings implements dts.AndroidActionBarSettings {
|
||||||
@ -126,16 +140,26 @@ export class ActionBar extends common.ActionBar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public _onAndroidItemSelected(itemId: number): boolean {
|
public _onAndroidItemSelected(itemId: number): boolean {
|
||||||
var menuItem = this.actionItems.getItemAt(itemId - ACTION_ITEM_ID_OFFSET);
|
// Handle home button
|
||||||
if (menuItem) {
|
|
||||||
menuItem._raiseTap();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.navigationButton && itemId === R_ID_HOME) {
|
if (this.navigationButton && itemId === R_ID_HOME) {
|
||||||
this.navigationButton._raiseTap();
|
this.navigationButton._raiseTap();
|
||||||
return true;
|
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 ((<ActionItem>items[i])._getItemId() === itemId) {
|
||||||
|
menuItem = items[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (menuItem) {
|
||||||
|
menuItem._raiseTap();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -211,8 +235,8 @@ export class ActionBar extends common.ActionBar {
|
|||||||
|
|
||||||
menu.clear();
|
menu.clear();
|
||||||
for (var i = 0; i < items.length; i++) {
|
for (var i = 0; i < items.length; i++) {
|
||||||
var item = items[i];
|
var item = <ActionItem>items[i];
|
||||||
var menuItem = menu.add(android.view.Menu.NONE, i + ACTION_ITEM_ID_OFFSET, android.view.Menu.NONE, item.text + "");
|
var menuItem = menu.add(android.view.Menu.NONE, item._getItemId(), android.view.Menu.NONE, item.text + "");
|
||||||
|
|
||||||
if (item.android.systemIcon) {
|
if (item.android.systemIcon) {
|
||||||
// Try to look in the system resources.
|
// Try to look in the system resources.
|
||||||
|
2
ui/enums/enums.d.ts
vendored
2
ui/enums/enums.d.ts
vendored
@ -359,7 +359,7 @@
|
|||||||
*/
|
*/
|
||||||
module NavigationBarVisibility {
|
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;
|
export var auto: string;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user