diff --git a/tns-core-modules/ui/action-bar/action-bar.android.ts b/tns-core-modules/ui/action-bar/action-bar.android.ts index 8d6c0caa8..02dd8f24d 100644 --- a/tns-core-modules/ui/action-bar/action-bar.android.ts +++ b/tns-core-modules/ui/action-bar/action-bar.android.ts @@ -15,6 +15,33 @@ function generateItemId(): number { return actionItemIdGenerator; } +interface MenuItemClickListener { + new (owner: ActionBar): android.support.v7.widget.Toolbar.OnMenuItemClickListener; +} + +let MenuItemClickListener: MenuItemClickListener; + +function initializeMenuItemClickListener(): void { + if (MenuItemClickListener) { + return; + } + + @Interfaces([android.support.v7.widget.Toolbar.OnMenuItemClickListener]) + class MenuItemClickListenerImpl extends java.lang.Object implements android.support.v7.widget.Toolbar.OnMenuItemClickListener { + constructor(public owner: ActionBar) { + super(); + return global.__native(this); + } + + onMenuItemClick(item: android.view.IMenuItem): boolean { + let itemId = item.getItemId(); + return this.owner._onAndroidItemSelected(itemId); + } + } + + MenuItemClickListener = MenuItemClickListenerImpl; +} + export class ActionItem extends ActionItemBase { private _androidPosition: AndroidActionItemSettings = { position: "actionBar", @@ -73,24 +100,6 @@ export class NavigationButton extends ActionItem { } -@Interfaces([android.support.v7.widget.Toolbar.OnMenuItemClickListener]) -class MenuItemClickListener extends java.lang.Object implements android.support.v7.widget.Toolbar.OnMenuItemClickListener { - constructor(public owner: WeakRef) { - super(); - return global.__native(this); - } - - onMenuItemClick(item: android.view.IMenuItem): boolean { - let owner = this.owner.get(); - if (!owner) { - return false; - } - - let itemId = item.getItemId(); - return owner._onAndroidItemSelected(itemId); - } -} - export class ActionBar extends ActionBarBase { private _appResources: android.content.res.Resources; private _android: AndroidActionBarSettings; @@ -116,8 +125,9 @@ export class ActionBar extends ActionBarBase { } public _createNativeView() { + initializeMenuItemClickListener(); this._toolbar = new android.support.v7.widget.Toolbar(this._context); - this._menuItemClickListener = this._menuItemClickListener || new MenuItemClickListener(new WeakRef(this)); + this._menuItemClickListener = this._menuItemClickListener || new MenuItemClickListener(this); this._toolbar.setOnMenuItemClickListener(this._menuItemClickListener); } @@ -342,7 +352,7 @@ export class ActionBar extends ActionBarBase { return defaultTitleTextColor; } set [colorProperty.native](value: number | Color) { - let color = value instanceof Color ? value.android : value; + let color = value instanceof Color ? value.android : value; this.nativeView.setTitleTextColor(color); } } diff --git a/tns-core-modules/ui/action-bar/action-bar.d.ts b/tns-core-modules/ui/action-bar/action-bar.d.ts index ee09bbe3c..4642a05f5 100644 --- a/tns-core-modules/ui/action-bar/action-bar.d.ts +++ b/tns-core-modules/ui/action-bar/action-bar.d.ts @@ -40,7 +40,7 @@ declare module "ui/action-bar" { update(); //@private - _isEmpty(): boolean + _isEmpty(): boolean; //@endprivate _addArrayFromBuilder(name: string, value: Array): void; diff --git a/tns-core-modules/ui/button/button.android.ts b/tns-core-modules/ui/button/button.android.ts index 7a167a730..0b0ee53c3 100644 --- a/tns-core-modules/ui/button/button.android.ts +++ b/tns-core-modules/ui/button/button.android.ts @@ -6,34 +6,45 @@ export * from "./button-common"; -@Interfaces([android.view.View.OnClickListener]) -class ClickListener extends java.lang.Object implements android.view.View.OnClickListener { - constructor(public owner: WeakRef