Merge pull request #134 from NativeScript/feature/cuteness-tab-fix

Fix tabs when pageCache is enabled
This commit is contained in:
Alexander Vakrilov
2015-05-14 16:57:10 +03:00
2 changed files with 75 additions and 43 deletions

View File

@@ -408,12 +408,28 @@ export function testBindingIsRefreshedWhenTabViewItemIsUnselectedAndThenSelected
}); });
} }
export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack() { export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack_NoPageCaching() {
testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBackg(false);
}
export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack_WithPageCaching() {
testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBackg(true);
}
function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBackg(enablePageCache: boolean) {
var i: number; var i: number;
var itemCount = 3; var itemCount = 3;
var loadedItems = [0, 0, 0]; var loadedItems = [0, 0, 0];
var unloadedItems = [0, 0, 0]; var unloadedItems = [0, 0, 0];
var topFrame = frameModule.topmost();
var oldChache;
if (topFrame.android) {
oldChache = topFrame.android.cachePagesOnNavigate;
topFrame.android.cachePagesOnNavigate = enablePageCache;
}
try {
var tabView = _createTabView(); var tabView = _createTabView();
var items = _createItems(itemCount); var items = _createItems(itemCount);
tabView.items = items; tabView.items = items;
@@ -432,6 +448,8 @@ export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack() {
helper.buildUIAndRunTest(tabView, function () { helper.buildUIAndRunTest(tabView, function () {
try { try {
TKUnit.waitUntilReady(() => { return items[0].view.isLoaded; }, ASYNC);
// Attach to loaded/unloaded events // Attach to loaded/unloaded events
for (i = 0; i < itemCount; i++) { for (i = 0; i < itemCount; i++) {
items[i].view.on("loaded", createLoadedFor(i)); items[i].view.on("loaded", createLoadedFor(i));
@@ -450,11 +468,13 @@ export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack() {
// Go back to the test page. // Go back to the test page.
helper.goBack(); helper.goBack();
} }
TKUnit.waitUntilReady(() => { return items[0].view.isLoaded; }, ASYNC);
//console.log("loaded items: " + loadedItems.join(", ")); //console.log("loaded items: " + loadedItems.join(", "));
//console.log("unloadedItems items: " + unloadedItems.join(", ")); //console.log("unloadedItems items: " + unloadedItems.join(", "));
// Check that at least the first item is loaded and unloaded // Check that at least the first item is loaded and unloaded
TKUnit.assert(items[0].view.isLoaded, "Thecontent of the first tab should be loaded.");
TKUnit.assertEqual(loadedItems[0], 1, "loaded count for 1st item"); TKUnit.assertEqual(loadedItems[0], 1, "loaded count for 1st item");
TKUnit.assertEqual(unloadedItems[0], 1, "unloaded count for 1st item"); TKUnit.assertEqual(unloadedItems[0], 1, "unloaded count for 1st item");
@@ -465,6 +485,13 @@ export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack() {
} }
}); });
} }
finally {
// Return original page cache value
if (topFrame.android) {
topFrame.android.cachePagesOnNavigate = oldChache;
}
}
}
function _clickTheFirstButtonInTheListViewNatively(tabView: tabViewModule.TabView) { function _clickTheFirstButtonInTheListViewNatively(tabView: tabViewModule.TabView) {
if (tabView.android) { if (tabView.android) {

View File

@@ -273,6 +273,11 @@ export class TabView extends common.TabView {
// If we are loading a TabView inside a hidden fragment this check will prevent it from polluting the action bar. // If we are loading a TabView inside a hidden fragment this check will prevent it from polluting the action bar.
if (this.android && this.android.isShown()) { if (this.android && this.android.isShown()) {
// Cover the case when pageCacheOnNavigate is enabled - set adapter in loaded as the TabView is already
// attached and _onItemsPropertyChangedSetNativeValue will not be called
if (!this._pagerAdapter && this.items) {
this._setAdapter(this.items);
}
this._addTabsIfNeeded(); this._addTabsIfNeeded();
this._setNativeSelectedIndex(this.selectedIndex); this._setNativeSelectedIndex(this.selectedIndex);
} }