Fixed 'jurky` navigation between pages in iOS.

Fixed after application suspend/resume the UI was not restored.
Fixed modal-views page
This commit is contained in:
Hristo Hristov
2016-02-24 09:40:18 +02:00
parent d8d68d3a51
commit a9d2b2e970
6 changed files with 35 additions and 37 deletions

View File

@@ -1,67 +1,62 @@
import observable = require("data/observable"); import {EventData} from "data/observable";
import pages = require("ui/page"); import {Page} from "ui/page";
import labelModule = require("ui/label"); import {Label} from "ui/label";
import frame = require("ui/frame"); import frame = require("ui/frame");
var page: pages.Page; export function onNavigatingTo(args: EventData) {
var label: labelModule.Label;
export function onNavigatingTo(args: observable.EventData) {
console.log(">>> main-page.onNavigatingTo"); console.log(">>> main-page.onNavigatingTo");
//console.trace(); //console.trace();
} }
export function onLoaded(args: observable.EventData) { export function onLoaded(args: EventData) {
console.log(">>> main-page.onLoaded"); console.log(">>> main-page.onLoaded");
//console.trace(); //console.trace();
if (args.object !== frame.topmost().currentPage) {
throw new Error("args.object must equal frame.topmost().currentPage on page.loaded");
}
page = <pages.Page>args.object;
label = frame.topmost().getViewById<labelModule.Label>("label");
if (!label) {
throw new Error("Could not find `label`");
}
} }
export function onNavigatedTo(args: observable.EventData) { export function onNavigatedTo(args: EventData) {
console.log(">>> main-page.onNavigatedTo"); console.log(">>> main-page.onNavigatedTo");
//console.trace(); //console.trace();
} }
export function onNavigatingFrom(args: observable.EventData) { export function onNavigatingFrom(args: EventData) {
console.log(">>> main-page.onNavigatingFrom"); console.log(">>> main-page.onNavigatingFrom");
} }
export function onNavigatedFrom(args: observable.EventData) { export function onNavigatedFrom(args: EventData) {
console.log(">>> main-page.onNavigatedFrom"); console.log(">>> main-page.onNavigatedFrom");
} }
export function onUnloaded(args: observable.EventData) { export function onUnloaded(args: EventData) {
console.log(">>> main-page.onUnloaded"); console.log(">>> main-page.onUnloaded");
} }
export function onTap(args: observable.EventData) { export function onTap(args: EventData) {
let page = (<any>args.object).page;
if ((<any>args.object).text.indexOf("(navigate)") !== -1) { if ((<any>args.object).text.indexOf("(navigate)") !== -1) {
var entry: frame.NavigationEntry = { var entry: frame.NavigationEntry = {
moduleName: "./login-page", moduleName: "./login-page",
context: "Context from navigate" context: "Context from navigate"
}; };
frame.topmost().navigate(entry);
page.frame.navigate(entry);
} }
else { else {
var fullscreen = (<any>args.object).text.indexOf("(full-screen)") !== -1; var fullscreen = (<any>args.object).text.indexOf("(full-screen)") !== -1;
showModal(fullscreen); showModal(page, fullscreen);
} }
} }
function showModal(fullscreen?: boolean) { function showModal(page: Page, fullscreen?: boolean) {
page.showModal("./modal-views-demo/login-page", "Context from showModal", function (username: string, password: string) { page.showModal("./modal-views-demo/login-page", "Context from showModal", function (username: string, password: string) {
console.log(username + "/" + password); console.log(username + "/" + password);
label.text = username + "/" + password; let label = page.getViewById<Label>("label");
if (label) {
label.text = username + "/" + password;
}
}, fullscreen); }, fullscreen);
} }
export function onCloseModal(args: observable.EventData) { export function onCloseModal(args: EventData) {
let page = (<any>args.object).page;
page.closeModal(); page.closeModal();
} }

View File

@@ -184,7 +184,7 @@ function onFragmentHidden(fragment) {
export class Frame extends frameCommon.Frame { export class Frame extends frameCommon.Frame {
private _android: AndroidFrame; private _android: AndroidFrame;
private _delayedNavigationEntry: definition.BackstackEntry; private _delayedNavigationEntry: definition.BackstackEntry;
private _containerViewId: number; private _containerViewId: number = -1;
private _listener: android.view.View.OnAttachStateChangeListener; private _listener: android.view.View.OnAttachStateChangeListener;
constructor() { constructor() {
super(); super();
@@ -379,7 +379,10 @@ export class Frame extends frameCommon.Frame {
public _createUI() { public _createUI() {
let root = new org.nativescript.widgets.ContentLayout(this._context); let root = new org.nativescript.widgets.ContentLayout(this._context);
this._containerViewId = android.view.View.generateViewId(); if (this._containerViewId < 0) {
this._containerViewId = android.view.View.generateViewId();
}
this._android.rootViewGroup = root; this._android.rootViewGroup = root;
this._android.rootViewGroup.setId(this._containerViewId); this._android.rootViewGroup.setId(this._containerViewId);
this._android.rootViewGroup.addOnAttachStateChangeListener(this._listener); this._android.rootViewGroup.addOnAttachStateChangeListener(this._listener);

View File

@@ -166,7 +166,7 @@ export class Frame extends frameCommon.Frame {
newValue = !page.actionBarHidden; newValue = !page.actionBarHidden;
} }
else { else {
newValue = this.backStack.length > 0 || (page && page.actionBar && !page.actionBar._isEmpty()); newValue = this.ios.controller.viewControllers.count > 1 || (page && page.actionBar && !page.actionBar._isEmpty());
} }
newValue = !!newValue; // Make sure it is boolean newValue = !!newValue; // Make sure it is boolean
@@ -174,7 +174,7 @@ export class Frame extends frameCommon.Frame {
} }
} }
public get ios(): definition.iOSFrame { public get ios(): iOSFrame {
return this._ios; return this._ios;
} }
@@ -706,7 +706,7 @@ class iOSFrame implements definition.iOSFrame {
public set showNavigationBar(value: boolean) { public set showNavigationBar(value: boolean) {
var change = this._showNavigationBar !== value; var change = this._showNavigationBar !== value;
this._showNavigationBar = value; this._showNavigationBar = value;
this._controller.navigationBarHidden = !value; this._controller.setNavigationBarHiddenAnimated(!value, true);
let currentPage = this._controller.owner.currentPage; let currentPage = this._controller.owner.currentPage;
if (currentPage && change) { if (currentPage && change) {

View File

@@ -43,14 +43,14 @@ function onSeparatorColorPropertyChanged(data: dependencyObservable.PropertyChan
export class ListView extends common.ListView { export class ListView extends common.ListView {
private _android: android.widget.ListView; private _android: android.widget.ListView;
public _realizedItems = {}; public _realizedItems = {};
private _androidViewId: number; private _androidViewId: number = -1;
public _createUI() { public _createUI() {
this._android = new android.widget.ListView(this._context); this._android = new android.widget.ListView(this._context);
// Fixes issue with black random black items when scrolling // Fixes issue with black random black items when scrolling
this._android.setCacheColorHint(android.graphics.Color.TRANSPARENT); this._android.setCacheColorHint(android.graphics.Color.TRANSPARENT);
if (!this._androidViewId) { if (this._androidViewId < 0) {
this._androidViewId = android.view.View.generateViewId(); this._androidViewId = android.view.View.generateViewId();
} }
this._android.setId(this._androidViewId); this._android.setId(this._androidViewId);

View File

@@ -12,7 +12,7 @@ common.orientationProperty.metadata.onValueChanged = function scrollViewOrientat
export class ScrollView extends common.ScrollView implements definition.ScrollView { export class ScrollView extends common.ScrollView implements definition.ScrollView {
private _android: org.nativescript.widgets.VerticalScrollView | org.nativescript.widgets.HorizontalScrollView; private _android: org.nativescript.widgets.VerticalScrollView | org.nativescript.widgets.HorizontalScrollView;
private _androidViewId: number; private _androidViewId: number = -1;
private handler: android.view.ViewTreeObserver.OnScrollChangedListener; private handler: android.view.ViewTreeObserver.OnScrollChangedListener;
get android(): android.view.ViewGroup { get android(): android.view.ViewGroup {
@@ -86,7 +86,7 @@ export class ScrollView extends common.ScrollView implements definition.ScrollVi
this._android = new org.nativescript.widgets.VerticalScrollView(this._context); this._android = new org.nativescript.widgets.VerticalScrollView(this._context);
} }
if (!this._androidViewId) { if (this._androidViewId < 0) {
this._androidViewId = android.view.View.generateViewId(); this._androidViewId = android.view.View.generateViewId();
} }

View File

@@ -191,7 +191,7 @@ export class TabView extends common.TabView {
private _tabLayout: org.nativescript.widgets.TabLayout; private _tabLayout: org.nativescript.widgets.TabLayout;
private _viewPager: android.support.v4.view.ViewPager; private _viewPager: android.support.v4.view.ViewPager;
private _pagerAdapter: android.support.v4.view.PagerAdapter; private _pagerAdapter: android.support.v4.view.PagerAdapter;
private _androidViewId: number; private _androidViewId: number = -1;
private _pageChagedListener: android.support.v4.view.ViewPager.SimpleOnPageChangeListener; private _pageChagedListener: android.support.v4.view.ViewPager.SimpleOnPageChangeListener;
@@ -227,7 +227,7 @@ export class TabView extends common.TabView {
this._viewPager.setLayoutParams(lp); this._viewPager.setLayoutParams(lp);
this._grid.addView(this._viewPager); this._grid.addView(this._viewPager);
if (!this._androidViewId) { if (this._androidViewId < 0) {
this._androidViewId = android.view.View.generateViewId(); this._androidViewId = android.view.View.generateViewId();
} }
this._grid.setId(this._androidViewId); this._grid.setId(this._androidViewId);