mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-17 21:01:34 +08:00
View lifecycle methods
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"name": "tns-samples-apps",
|
"name": "tns-samples-apps",
|
||||||
"main": "ui-tests-app/app.js"
|
"main": "cuteness.io/app.js"
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tns-core-modules": "2.4.2"
|
"tns-core-modules": "2.4.2",
|
||||||
|
"tns-core-modules-widgets": "file:///Users/vakrilov/Work/Projects/tns-core-modules-widgets/dist/tns-core-modules-widgets-2.5.0.tgz"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"tns-platform-declarations": "*",
|
"tns-platform-declarations": "*",
|
||||||
|
@ -85,7 +85,7 @@ export class MyButton extends Button implements def.MyButton {
|
|||||||
return this._layout;
|
return this._layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._layout = new NativeButton(this._context, this);
|
this._layout = new NativeButton(this._context, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ export class MyStackLayout extends StackLayout implements def.MyStackLayout {
|
|||||||
return this._layout;
|
return this._layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._layout = new NativeStackLayout(this._context, this);
|
this._layout = new NativeStackLayout(this._context, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,7 +191,7 @@ export class MyGridLayout extends GridLayout implements def.MyGridLayout {
|
|||||||
return this._layout;
|
return this._layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._layout = new NativeGridLayout(this._context, this);
|
this._layout = new NativeGridLayout(this._context, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +204,8 @@ export var test_event_onContextChanged_IsNotRaised_WhenAttachedToSameContext = f
|
|||||||
var listener = new Listener("_onContextChanged");
|
var listener = new Listener("_onContextChanged");
|
||||||
trace.addEventListener(listener);
|
trace.addEventListener(listener);
|
||||||
|
|
||||||
views[2]._onAttached(views[0]._context);
|
// views[2]._onContextChanged(views[0]._context);
|
||||||
|
views[2]._setupUI(views[0]._context);
|
||||||
|
|
||||||
TKUnit.assertEqual(listener.receivedEvents.length, 0, "listener.receivedEvents.length");
|
TKUnit.assertEqual(listener.receivedEvents.length, 0, "listener.receivedEvents.length");
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ export class ActionBar extends ActionBarBase {
|
|||||||
return this._toolbar;
|
return this._toolbar;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._toolbar = new android.support.v7.widget.Toolbar(this._context);
|
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(new WeakRef(this));
|
||||||
this._toolbar.setOnMenuItemClickListener(this._menuItemClickListener);
|
this._toolbar.setOnMenuItemClickListener(this._menuItemClickListener);
|
||||||
@ -302,7 +302,7 @@ export class ActionBar extends ActionBarBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public _clearAndroidReference() {
|
public _disposeNativeView() {
|
||||||
// don't clear _android field!
|
// don't clear _android field!
|
||||||
this.nativeView = undefined;
|
this.nativeView = undefined;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ export * from "./activity-indicator-common";
|
|||||||
export class ActivityIndicator extends ActivityIndicatorBase {
|
export class ActivityIndicator extends ActivityIndicatorBase {
|
||||||
_progressBar: android.widget.ProgressBar;
|
_progressBar: android.widget.ProgressBar;
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._progressBar = new android.widget.ProgressBar(this._context);
|
this._progressBar = new android.widget.ProgressBar(this._context);
|
||||||
this._progressBar.setVisibility(android.view.View.INVISIBLE);
|
this._progressBar.setVisibility(android.view.View.INVISIBLE);
|
||||||
this._progressBar.setIndeterminate(true);
|
this._progressBar.setIndeterminate(true);
|
||||||
|
@ -30,7 +30,7 @@ export class Button extends ButtonBase {
|
|||||||
return this._button;
|
return this._button;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
let weakRef = new WeakRef(this);
|
let weakRef = new WeakRef(this);
|
||||||
this._button = new android.widget.Button(this._context);
|
this._button = new android.widget.Button(this._context);
|
||||||
this._button.setOnClickListener(new ClickListener(weakRef));
|
this._button.setOnClickListener(new ClickListener(weakRef));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { ViewBase as ViewBaseDefinition } from "ui/core/view-base";
|
import { ViewBase as ViewBaseDefinition } from "ui/core/view-base";
|
||||||
import { Observable, EventData } from "data/observable";
|
import { Observable, EventData } from "data/observable";
|
||||||
import { Property, InheritedProperty, Style, clearInheritedProperties, propagateInheritedProperties, resetCSSProperties, applyNativeSetters } from "./properties";
|
import { Property, InheritedProperty, Style, clearInheritedProperties, propagateInheritedProperties, resetCSSProperties, applyNativeSetters, resetStyleProperties } from "./properties";
|
||||||
import { Binding, BindingOptions, Bindable } from "ui/core/bindable";
|
import { Binding, BindingOptions, Bindable } from "ui/core/bindable";
|
||||||
import { isIOS, isAndroid } from "platform";
|
import { isIOS, isAndroid } from "platform";
|
||||||
import { fromString as gestureFromString } from "ui/gestures";
|
import { fromString as gestureFromString } from "ui/gestures";
|
||||||
@ -408,20 +408,16 @@ export class ViewBase extends Observable implements ViewBaseDefinition {
|
|||||||
|
|
||||||
protected _addViewCore(view: ViewBase, atIndex?: number) {
|
protected _addViewCore(view: ViewBase, atIndex?: number) {
|
||||||
if (this._context) {
|
if (this._context) {
|
||||||
view._onAttached(this._context);
|
view._setupUI(this._context, atIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!view._isAddedToNativeVisualTree) {
|
// TODO: Split this method - we want binding context before loaded.
|
||||||
let nativeIndex = this._childIndexToNativeChildIndex(atIndex);
|
propagateInheritedProperties(this);
|
||||||
view._isAddedToNativeVisualTree = this._addViewToNativeVisualTree(view, nativeIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Discuss this.
|
// TODO: Discuss this.
|
||||||
if (this._isLoaded) {
|
if (this._isLoaded) {
|
||||||
view.onLoaded();
|
view.onLoaded();
|
||||||
}
|
}
|
||||||
|
|
||||||
propagateInheritedProperties(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -452,81 +448,77 @@ export class ViewBase extends Observable implements ViewBaseDefinition {
|
|||||||
|
|
||||||
// view.unsetInheritedProperties();
|
// view.unsetInheritedProperties();
|
||||||
|
|
||||||
// Remove the view from the native visual scene first
|
|
||||||
this._removeViewFromNativeVisualTree(view);
|
|
||||||
|
|
||||||
if (view._context) {
|
if (view._context) {
|
||||||
view._onDetached();
|
view._tearDownUI();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public _onAttached(context: any) {
|
public _createNativeView() {
|
||||||
if (!context) {
|
|
||||||
throw new Error("Expected valid android.content.Context instance.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (traceEnabled) {
|
|
||||||
traceWrite(`${this}._onAttached(context)`, traceCategories.VisualTreeEvents);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._context === context) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._context) {
|
|
||||||
this._onDetached(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._context = context;
|
|
||||||
this._onContextChanged();
|
|
||||||
|
|
||||||
if (traceEnabled) {
|
|
||||||
traceNotifyEvent(this, "_onAttached");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notify each child for the _onAttached event
|
|
||||||
this.eachChild((child) => {
|
|
||||||
child._onAttached(context);
|
|
||||||
|
|
||||||
if (!child._isAddedToNativeVisualTree) {
|
|
||||||
// since we have lazy loading of the android widgets, we need to add the native instances at this point.
|
|
||||||
child._isAddedToNativeVisualTree = this._addViewToNativeVisualTree(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
// copy all the locally cached values to the native android widget
|
|
||||||
applyNativeSetters(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public _onDetached(force?: boolean) {
|
|
||||||
if (traceEnabled) {
|
|
||||||
traceWrite(`${this}._onDetached(force)`, traceCategories.VisualTreeEvents);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Detach children first
|
|
||||||
this.eachChild((child: ViewBase) => {
|
|
||||||
if (child._isAddedToNativeVisualTree) {
|
|
||||||
this._removeViewFromNativeVisualTree(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (child._context) {
|
|
||||||
child._onDetached(force);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
this._context = undefined;
|
|
||||||
if (traceEnabled) {
|
|
||||||
traceNotifyEvent(this, "_onDetached");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public _onContextChanged(): void {
|
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public _disposeNativeView() {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
public _initNativeView(): void {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
public _resetNativeView(): void {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
public _setupUI(context: android.content.Context, atIndex?: number) {
|
||||||
|
this._context = context;
|
||||||
|
|
||||||
|
// TODO: refactor createUI to return native view
|
||||||
|
this._createNativeView();
|
||||||
|
this.nativeView = (<any>this)._nativeView;
|
||||||
|
|
||||||
|
this._initNativeView();
|
||||||
|
|
||||||
|
// TODO: Remove this
|
||||||
|
if (this.nativeView && !this.nativeView.getLayoutParams()) {
|
||||||
|
this.nativeView.setLayoutParams(new org.nativescript.widgets.CommonLayoutParams());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.parent) {
|
||||||
|
this.parent._addViewToNativeVisualTree(this, atIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
applyNativeSetters(this);
|
||||||
|
|
||||||
|
this.eachChild((child) => {
|
||||||
|
child._setupUI(context);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
// if (traceEnabled) {
|
||||||
|
// traceNotifyEvent(this, "_onAttached");
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
public _tearDownUI(force?: boolean) {
|
||||||
|
this.eachChild((child) => {
|
||||||
|
child._tearDownUI(force);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
// TODO: rename and implement this as resetNativeSetters
|
||||||
|
resetStyleProperties(this.style);
|
||||||
|
|
||||||
|
if (this.parent) {
|
||||||
|
this.parent._removeViewFromNativeVisualTree(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._resetNativeView();
|
||||||
|
|
||||||
|
this._disposeNativeView();
|
||||||
|
|
||||||
|
this._context = null;
|
||||||
|
}
|
||||||
|
|
||||||
_childIndexToNativeChildIndex(index?: number): number {
|
_childIndexToNativeChildIndex(index?: number): number {
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
@ -765,7 +765,7 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition {
|
|||||||
return { boundsChanged, sizeChanged };
|
return { boundsChanged, sizeChanged };
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,15 +106,8 @@ export class View extends ViewCommon {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public _onDetached(force?: boolean) {
|
|
||||||
// Call super for recursive detach of all children.
|
|
||||||
super._onDetached(force);
|
|
||||||
|
|
||||||
this._clearAndroidReference();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: revise this method
|
// TODO: revise this method
|
||||||
public _clearAndroidReference() {
|
public _disposeNativeView() {
|
||||||
|
|
||||||
// Widgets like buttons and such have reference to their native view in both properties.
|
// Widgets like buttons and such have reference to their native view in both properties.
|
||||||
if (this[NATIVE_VIEW] === this[ANDROID]) {
|
if (this[NATIVE_VIEW] === this[ANDROID]) {
|
||||||
@ -129,24 +122,6 @@ export class View extends ViewCommon {
|
|||||||
this[ANDROID] = undefined;
|
this[ANDROID] = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _onContextChanged() {
|
|
||||||
if (traceEnabled) {
|
|
||||||
traceWrite(`${this}._onContextChanged`, traceCategories.VisualTreeEvents);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._createUI();
|
|
||||||
// Ensure layout params
|
|
||||||
if (this._nativeView && !this._nativeView.getLayoutParams()) {
|
|
||||||
this._nativeView.setLayoutParams(new org.nativescript.widgets.CommonLayoutParams());
|
|
||||||
}
|
|
||||||
|
|
||||||
this.nativeView = this._nativeView;
|
|
||||||
|
|
||||||
if (traceEnabled) {
|
|
||||||
traceNotifyEvent(this, "_onContextChanged");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get _nativeView(): android.view.View {
|
get _nativeView(): android.view.View {
|
||||||
return this.android;
|
return this.android;
|
||||||
}
|
}
|
||||||
@ -573,7 +548,7 @@ export class CustomLayoutView extends View implements CustomLayoutViewDefinition
|
|||||||
return this._viewGroup;
|
return this._viewGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._viewGroup = new org.nativescript.widgets.ContentLayout(this._context);
|
this._viewGroup = new org.nativescript.widgets.ContentLayout(this._context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
tns-core-modules/ui/core/view.d.ts
vendored
2
tns-core-modules/ui/core/view.d.ts
vendored
@ -546,8 +546,6 @@ declare module "ui/core/view" {
|
|||||||
_gestureObservers: any;
|
_gestureObservers: any;
|
||||||
// _isInheritedChange(): boolean;
|
// _isInheritedChange(): boolean;
|
||||||
|
|
||||||
_createUI(): void;
|
|
||||||
|
|
||||||
_updateLayout(): void;
|
_updateLayout(): void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -48,7 +48,7 @@ export class DatePicker extends DatePickerBase {
|
|||||||
return this._android;
|
return this._android;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._android = new android.widget.DatePicker(this._context);
|
this._android = new android.widget.DatePicker(this._context);
|
||||||
this._android.setCalendarViewShown(false);
|
this._android.setCalendarViewShown(false);
|
||||||
this._listener = this._listener = new DateChangedListener(new WeakRef(this));
|
this._listener = this._listener = new DateChangedListener(new WeakRef(this));
|
||||||
|
36
tns-core-modules/ui/definitions.d.ts
vendored
36
tns-core-modules/ui/definitions.d.ts
vendored
@ -112,12 +112,40 @@ declare module "ui/core/view-base" {
|
|||||||
_cancelAllAnimations();
|
_cancelAllAnimations();
|
||||||
|
|
||||||
_context: any /* android.content.Context */;
|
_context: any /* android.content.Context */;
|
||||||
_onAttached(context: any /* android.content.Context */): void;
|
|
||||||
_onContextChanged(): void;
|
/**
|
||||||
_onDetached(force?: boolean): void;
|
* Setups the UI for ViewBase and all its children recursively.
|
||||||
|
* This method should *not* be overridden by derived views.
|
||||||
|
*/
|
||||||
|
_setupUI(context: any /* android.content.Context */, atIndex?: number): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tears down the UI for ViewBase and all its children recursively.
|
||||||
|
* This method should *not* be overridden by derived views.
|
||||||
|
*/
|
||||||
|
_tearDownUI(force?: boolean): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a native view
|
||||||
|
*/
|
||||||
|
_createNativeView(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean up references to the native view.
|
||||||
|
*/
|
||||||
|
_disposeNativeView(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes properties/listeners of the native view.
|
||||||
|
*/
|
||||||
|
_initNativeView(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets properties/listeners set to the native view.
|
||||||
|
*/
|
||||||
|
_resetNativeView(): void;
|
||||||
|
|
||||||
_isAddedToNativeVisualTree: boolean;
|
_isAddedToNativeVisualTree: boolean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs the core logic of adding a child view to the native visual tree. Returns true if the view's native representation has been successfully added, false otherwise.
|
* Performs the core logic of adding a child view to the native visual tree. Returns true if the view's native representation has been successfully added, false otherwise.
|
||||||
*/
|
*/
|
||||||
|
@ -147,7 +147,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
|
|||||||
|
|
||||||
public abstract _onReturnPress(): void;
|
public abstract _onReturnPress(): void;
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._android = new android.widget.EditText(this._context);
|
this._android = new android.widget.EditText(this._context);
|
||||||
this._configureEditText();
|
this._configureEditText();
|
||||||
this._keyListenerCache = this.android.getKeyListener();
|
this._keyListenerCache = this.android.getKeyListener();
|
||||||
@ -164,7 +164,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
|
|||||||
this._android.setOnEditorActionListener(this._editorActionListener);
|
this._android.setOnEditorActionListener(this._editorActionListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
public _onDetached(force?: boolean) {
|
public _resetNativeView(force?: boolean) {
|
||||||
if (this._android) {
|
if (this._android) {
|
||||||
if (this._textWatcher) {
|
if (this._textWatcher) {
|
||||||
this._android.removeTextChangedListener(this._textWatcher);
|
this._android.removeTextChangedListener(this._textWatcher);
|
||||||
@ -178,9 +178,12 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
|
|||||||
this._android.setOnEditorActionListener(null);
|
this._android.setOnEditorActionListener(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
super._resetNativeView();
|
||||||
|
}
|
||||||
|
|
||||||
|
public _disposeNativeView(force?: boolean) {
|
||||||
this._android = undefined;
|
this._android = undefined;
|
||||||
super._onDetached(force);
|
super._disposeNativeView();
|
||||||
}
|
}
|
||||||
|
|
||||||
public dismissSoftInput() {
|
public dismissSoftInput() {
|
||||||
|
@ -294,7 +294,7 @@ export class Frame extends FrameBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
let root = new org.nativescript.widgets.ContentLayout(this._context);
|
let root = new org.nativescript.widgets.ContentLayout(this._context);
|
||||||
if (this._containerViewId < 0) {
|
if (this._containerViewId < 0) {
|
||||||
this._containerViewId = android.view.View.generateViewId();
|
this._containerViewId = android.view.View.generateViewId();
|
||||||
@ -327,8 +327,11 @@ export class Frame extends FrameBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public _clearAndroidReference() {
|
public _resetNativeView() {
|
||||||
this._android.rootViewGroup.removeOnAttachStateChangeListener(this._listener);
|
this._android.rootViewGroup.removeOnAttachStateChangeListener(this._listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public _disposeNativeView() {
|
||||||
// we should keep the reference to underlying native object, since frame can contain many pages.
|
// we should keep the reference to underlying native object, since frame can contain many pages.
|
||||||
this._android.rootViewGroup = null;
|
this._android.rootViewGroup = null;
|
||||||
}
|
}
|
||||||
@ -704,7 +707,7 @@ class FragmentCallbacksImplementation implements AndroidFragmentCallbacks {
|
|||||||
const page = entry.resolvedPage;
|
const page = entry.resolvedPage;
|
||||||
if (savedInstanceState && savedInstanceState.getBoolean(HIDDEN, false)) {
|
if (savedInstanceState && savedInstanceState.getBoolean(HIDDEN, false)) {
|
||||||
fragment.getFragmentManager().beginTransaction().hide(fragment).commit();
|
fragment.getFragmentManager().beginTransaction().hide(fragment).commit();
|
||||||
page._onAttached(fragment.getActivity());
|
this.frame._addView(page);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
onFragmentShown(fragment);
|
onFragmentShown(fragment);
|
||||||
@ -813,7 +816,7 @@ class ActivityCallbacksImplementation implements AndroidActivityCallbacks {
|
|||||||
this._rootView = rootView;
|
this._rootView = rootView;
|
||||||
|
|
||||||
// Initialize native visual tree;
|
// Initialize native visual tree;
|
||||||
rootView._onAttached(activity);
|
rootView._setupUI(activity);
|
||||||
activity.setContentView(rootView._nativeView, new org.nativescript.widgets.CommonLayoutParams());
|
activity.setContentView(rootView._nativeView, new org.nativescript.widgets.CommonLayoutParams());
|
||||||
// frameId is negative w
|
// frameId is negative w
|
||||||
if (frame) {
|
if (frame) {
|
||||||
@ -858,7 +861,7 @@ class ActivityCallbacksImplementation implements AndroidActivityCallbacks {
|
|||||||
public onDestroy(activity: any, superFunc: Function): void {
|
public onDestroy(activity: any, superFunc: Function): void {
|
||||||
let rootView = this._rootView;
|
let rootView = this._rootView;
|
||||||
if (rootView && rootView._context) {
|
if (rootView && rootView._context) {
|
||||||
rootView._onDetached(true);
|
rootView._tearDownUI(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
superFunc.call(activity);
|
superFunc.call(activity);
|
||||||
|
@ -11,7 +11,7 @@ export class HtmlView extends HtmlViewBase {
|
|||||||
return this._android;
|
return this._android;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._android = new android.widget.TextView(this._context);
|
this._android = new android.widget.TextView(this._context);
|
||||||
// This makes the html <a href...> work
|
// This makes the html <a href...> work
|
||||||
this._android.setLinksClickable(true);
|
this._android.setLinksClickable(true);
|
||||||
|
@ -59,7 +59,7 @@ export class Image extends ImageBase {
|
|||||||
return this._android;
|
return this._android;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
if (!imageFetcher) {
|
if (!imageFetcher) {
|
||||||
initImageCache(this._context);
|
initImageCache(this._context);
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ export class Label extends TextBase implements LabelDefinition {
|
|||||||
return this._android;
|
return this._android;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._android = new android.widget.TextView(this._context);
|
this._android = new android.widget.TextView(this._context);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -51,7 +51,7 @@ export class AbsoluteLayout extends AbsoluteLayoutBase {
|
|||||||
return this._layout;
|
return this._layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._layout = new org.nativescript.widgets.AbsoluteLayout(this._context);
|
this._layout = new org.nativescript.widgets.AbsoluteLayout(this._context);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -54,7 +54,7 @@ export class DockLayout extends DockLayoutBase {
|
|||||||
return this._layout;
|
return this._layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._layout = new org.nativescript.widgets.DockLayout(this._context);
|
this._layout = new org.nativescript.widgets.DockLayout(this._context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ export class FlexboxLayout extends FlexboxLayoutBase {
|
|||||||
get android(): FlexboxLayoutWidget { return this._layout; }
|
get android(): FlexboxLayoutWidget { return this._layout; }
|
||||||
get _nativeView(): FlexboxLayoutWidget { return this._layout; }
|
get _nativeView(): FlexboxLayoutWidget { return this._layout; }
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._layout = new org.nativescript.widgets.FlexboxLayout(this._context);
|
this._layout = new org.nativescript.widgets.FlexboxLayout(this._context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ export class GridLayout extends GridLayoutBase {
|
|||||||
return this._layout;
|
return this._layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._layout = new org.nativescript.widgets.GridLayout(this._context);
|
this._layout = new org.nativescript.widgets.GridLayout(this._context);
|
||||||
|
|
||||||
// Update native GridLayout
|
// Update native GridLayout
|
||||||
|
@ -35,15 +35,15 @@ export class Layout extends LayoutBase implements LayoutDefinition {
|
|||||||
return this._viewGroup;
|
return this._viewGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
ensureNativeViewGroupClass();
|
ensureNativeViewGroupClass();
|
||||||
this._viewGroup = new NativeViewGroupClass(this._context);
|
this._viewGroup = new NativeViewGroupClass(this._context);
|
||||||
this._viewGroup[OWNER] = this;
|
this._viewGroup[OWNER] = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _onDetached(force?: boolean) {
|
public _disposeNativeView() {
|
||||||
delete this._viewGroup[OWNER];
|
delete this._viewGroup[OWNER];
|
||||||
super._onDetached(force);
|
super._disposeNativeView();
|
||||||
}
|
}
|
||||||
|
|
||||||
public measure(widthMeasureSpec: number, heightMeasureSpec: number): void {
|
public measure(widthMeasureSpec: number, heightMeasureSpec: number): void {
|
||||||
|
@ -13,7 +13,7 @@ export class StackLayout extends StackLayoutBase {
|
|||||||
return this._layout;
|
return this._layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._layout = new org.nativescript.widgets.StackLayout(this._context);
|
this._layout = new org.nativescript.widgets.StackLayout(this._context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ export class WrapLayout extends WrapLayoutBase {
|
|||||||
return this._layout;
|
return this._layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._layout = new org.nativescript.widgets.WrapLayout(this._context);
|
this._layout = new org.nativescript.widgets.WrapLayout(this._context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ export class ListPicker extends ListPickerBase {
|
|||||||
return this._android;
|
return this._android;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._android = new android.widget.NumberPicker(this._context);
|
this._android = new android.widget.NumberPicker(this._context);
|
||||||
let editText = getEditText(this._android);
|
let editText = getEditText(this._android);
|
||||||
this._editText = editText;
|
this._editText = editText;
|
||||||
|
@ -36,7 +36,7 @@ export class ListView extends ListViewBase {
|
|||||||
public _realizedItems = new Map<android.view.View, View>();
|
public _realizedItems = new Map<android.view.View, View>();
|
||||||
public _realizedTemplates = new Map<string, Map<android.view.View, View>>();
|
public _realizedTemplates = new Map<string, Map<android.view.View, View>>();
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._android = new android.widget.ListView(this._context);
|
this._android = new android.widget.ListView(this._context);
|
||||||
this._android.setDescendantFocusability(android.view.ViewGroup.FOCUS_AFTER_DESCENDANTS);
|
this._android.setDescendantFocusability(android.view.ViewGroup.FOCUS_AFTER_DESCENDANTS);
|
||||||
this.updateEffectiveRowHeight();
|
this.updateEffectiveRowHeight();
|
||||||
@ -80,8 +80,8 @@ export class ListView extends ListViewBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public _onDetached(force?: boolean) {
|
public _disposeNativeView() {
|
||||||
super._onDetached(force);
|
super._disposeNativeView();
|
||||||
this.clearRealizedCells();
|
this.clearRealizedCells();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ function ensureListViewAdapterClass() {
|
|||||||
|
|
||||||
public getItem(i: number) {
|
public getItem(i: number) {
|
||||||
if (this._listView && this._listView.items && i < this._listView.items.length) {
|
if (this._listView && this._listView.items && i < this._listView.items.length) {
|
||||||
let getItem = (<ItemsSource>this._listView.items).getItem
|
let getItem = (<ItemsSource>this._listView.items).getItem;
|
||||||
return getItem ? getItem(i) : this._listView.items[i];
|
return getItem ? getItem(i) : this._listView.items[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,8 +68,7 @@ function ensureDialogFragmentClass() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._owner._isAddedToNativeVisualTree = false;
|
this._owner._isAddedToNativeVisualTree = false;
|
||||||
this._owner._onDetached(true);
|
this._owner._tearDownUI(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public onDismiss(dialog: android.content.IDialogInterface) {
|
public onDismiss(dialog: android.content.IDialogInterface) {
|
||||||
@ -94,7 +93,7 @@ export class Page extends PageBase {
|
|||||||
return this._grid;
|
return this._grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._grid = new org.nativescript.widgets.GridLayout(this._context);
|
this._grid = new org.nativescript.widgets.GridLayout(this._context);
|
||||||
this._grid.addRow(new org.nativescript.widgets.ItemSpec(1, org.nativescript.widgets.GridUnitType.auto));
|
this._grid.addRow(new org.nativescript.widgets.ItemSpec(1, org.nativescript.widgets.GridUnitType.auto));
|
||||||
this._grid.addRow(new org.nativescript.widgets.ItemSpec(1, org.nativescript.widgets.GridUnitType.star));
|
this._grid.addRow(new org.nativescript.widgets.ItemSpec(1, org.nativescript.widgets.GridUnitType.star));
|
||||||
@ -123,11 +122,11 @@ export class Page extends PageBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public _onDetached(force?: boolean) {
|
public _tearDownUI(force?: boolean) {
|
||||||
const skipDetached = !force && this.frame.android.cachePagesOnNavigate && !this._isBackNavigation;
|
const skipDetached = !force && this.frame.android.cachePagesOnNavigate && !this._isBackNavigation;
|
||||||
|
|
||||||
if (!skipDetached) {
|
if (!skipDetached) {
|
||||||
super._onDetached();
|
super._tearDownUI();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,7 +144,7 @@ export class Page extends PageBase {
|
|||||||
this.backgroundColor = new Color("White");
|
this.backgroundColor = new Color("White");
|
||||||
}
|
}
|
||||||
|
|
||||||
this._onAttached(parent._context);
|
this._setupUI(parent._context);
|
||||||
this._isAddedToNativeVisualTree = true;
|
this._isAddedToNativeVisualTree = true;
|
||||||
applyNativeSetters(this);
|
applyNativeSetters(this);
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ export class Placeholder extends PlaceholderDefinition {
|
|||||||
|
|
||||||
private _android: android.view.View;
|
private _android: android.view.View;
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
let args = <CreateViewEventData>{ eventName: Placeholder.creatingViewEvent, object: this, view: undefined, context: this._context };
|
let args = <CreateViewEventData>{ eventName: Placeholder.creatingViewEvent, object: this, view: undefined, context: this._context };
|
||||||
this.notify(args);
|
this.notify(args);
|
||||||
this._android = <android.view.View>args.view;
|
this._android = <android.view.View>args.view;
|
||||||
|
@ -10,7 +10,7 @@ const R_ATTR_PROGRESS_BAR_STYLE_HORIZONTAL = 0x01010078;
|
|||||||
export class Progress extends ProgressBase {
|
export class Progress extends ProgressBase {
|
||||||
private _android: android.widget.ProgressBar;
|
private _android: android.widget.ProgressBar;
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._android = new android.widget.ProgressBar(this._context, null, R_ATTR_PROGRESS_BAR_STYLE_HORIZONTAL);
|
this._android = new android.widget.ProgressBar(this._context, null, R_ATTR_PROGRESS_BAR_STYLE_HORIZONTAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ export class ProxyViewContainer extends LayoutBase implements ProxyViewContainer
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ export class ScrollView extends ScrollViewBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
if (this.orientation === "horizontal") {
|
if (this.orientation === "horizontal") {
|
||||||
this._android = new org.nativescript.widgets.HorizontalScrollView(this._context);
|
this._android = new org.nativescript.widgets.HorizontalScrollView(this._context);
|
||||||
} else {
|
} else {
|
||||||
|
@ -78,7 +78,7 @@ export class SearchBar extends SearchBarBase {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._android = new android.widget.SearchView(this._context);
|
this._android = new android.widget.SearchView(this._context);
|
||||||
|
|
||||||
this._android.setIconified(false);
|
this._android.setIconified(false);
|
||||||
|
@ -184,7 +184,7 @@ export class SegmentedBar extends SegmentedBarBase {
|
|||||||
private listener: android.widget.TabHost.OnTabChangeListener;
|
private listener: android.widget.TabHost.OnTabChangeListener;
|
||||||
private tabContentFactory: android.widget.TabHost.TabContentFactory;
|
private tabContentFactory: android.widget.TabHost.TabContentFactory;
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
ensureTabHostClass();
|
ensureTabHostClass();
|
||||||
ensureSegmentedBarColorDrawableClass();
|
ensureSegmentedBarColorDrawableClass();
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ export class Slider extends SliderBase {
|
|||||||
private _android: android.widget.SeekBar;
|
private _android: android.widget.SeekBar;
|
||||||
private changeListener: android.widget.SeekBar.OnSeekBarChangeListener;
|
private changeListener: android.widget.SeekBar.OnSeekBarChangeListener;
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this.changeListener = this.changeListener || new SeekBarChangeListener(new WeakRef(this));
|
this.changeListener = this.changeListener || new SeekBarChangeListener(new WeakRef(this));
|
||||||
this._android = new android.widget.SeekBar(this._context);
|
this._android = new android.widget.SeekBar(this._context);
|
||||||
this._android.setOnSeekBarChangeListener(this.changeListener);
|
this._android.setOnSeekBarChangeListener(this.changeListener);
|
||||||
|
@ -28,7 +28,7 @@ export class Switch extends SwitchBase {
|
|||||||
return this._android;
|
return this._android;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._android = new android.widget.Switch(this._context);
|
this._android = new android.widget.Switch(this._context);
|
||||||
this.listener = this.listener || new CheckedChangeListener(new WeakRef(this));
|
this.listener = this.listener || new CheckedChangeListener(new WeakRef(this));
|
||||||
this._android.setOnCheckedChangeListener(this.listener);
|
this._android.setOnCheckedChangeListener(this.listener);
|
||||||
|
@ -184,7 +184,7 @@ export class TabView extends TabViewBase {
|
|||||||
return this._grid;
|
return this._grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
if (traceEnabled) {
|
if (traceEnabled) {
|
||||||
traceWrite("TabView._createUI(" + this + ");", traceCategory);
|
traceWrite("TabView._createUI(" + this + ");", traceCategory);
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ export class TimePicker extends TimePickerBase {
|
|||||||
private _android: android.widget.TimePicker;
|
private _android: android.widget.TimePicker;
|
||||||
private _listener: android.widget.TimePicker.OnTimeChangedListener;
|
private _listener: android.widget.TimePicker.OnTimeChangedListener;
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._android = new android.widget.TimePicker(this._context);
|
this._android = new android.widget.TimePicker(this._context);
|
||||||
this._listener = this._listener || new TimeChangedListener(new WeakRef(this));
|
this._listener = this._listener || new TimeChangedListener(new WeakRef(this));
|
||||||
this._android.setOnTimeChangedListener(this._listener);
|
this._android.setOnTimeChangedListener(this._listener);
|
||||||
|
@ -402,7 +402,7 @@ function _completePageRemoval(fragment: any, isBack: boolean) {
|
|||||||
if (expandedFragment.isDestroyed) {
|
if (expandedFragment.isDestroyed) {
|
||||||
expandedFragment.isDestroyed = undefined;
|
expandedFragment.isDestroyed = undefined;
|
||||||
if (page._context) {
|
if (page._context) {
|
||||||
page._onDetached(true);
|
page._tearDownUI(true);
|
||||||
if (traceEnabled) {
|
if (traceEnabled) {
|
||||||
traceWrite(`DETACHMENT of ${page} completed`, traceCategories.Transition);
|
traceWrite(`DETACHMENT of ${page} completed`, traceCategories.Transition);
|
||||||
}
|
}
|
||||||
@ -425,7 +425,7 @@ export function _removePageNativeViewFromAndroidParent(page: Page): void {
|
|||||||
if (traceEnabled) {
|
if (traceEnabled) {
|
||||||
traceWrite(`REMOVED ${page}._nativeView from its Android parent`, traceCategories.Transition);
|
traceWrite(`REMOVED ${page}._nativeView from its Android parent`, traceCategories.Transition);
|
||||||
}
|
}
|
||||||
page._onDetached(true);
|
page._tearDownUI(true);
|
||||||
androidParent.removeView(page._nativeView);
|
androidParent.removeView(page._nativeView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -97,18 +97,18 @@ export class WebView extends WebViewBase {
|
|||||||
return this._android;
|
return this._android;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _createUI() {
|
public _createNativeView() {
|
||||||
this._android = new android.webkit.WebView(this._context);
|
this._android = new android.webkit.WebView(this._context);
|
||||||
this._android.getSettings().setJavaScriptEnabled(true);
|
this._android.getSettings().setJavaScriptEnabled(true);
|
||||||
this._android.getSettings().setBuiltInZoomControls(true);
|
this._android.getSettings().setBuiltInZoomControls(true);
|
||||||
this._android.setWebViewClient(this._webViewClient);
|
this._android.setWebViewClient(this._webViewClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
public _onDetached(force?: boolean) {
|
public _resetNativeView() {
|
||||||
if (this.android) {
|
if (this.android) {
|
||||||
this.android.destroy();
|
this.android.destroy();
|
||||||
}
|
}
|
||||||
super._onDetached(force);
|
super._resetNativeView();
|
||||||
}
|
}
|
||||||
|
|
||||||
public _loadUrl(url: string) {
|
public _loadUrl(url: string) {
|
||||||
|
Reference in New Issue
Block a user