mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
Add fragmentForPage method to AndroidFrame interface.
This commit is contained in:
@ -4,6 +4,7 @@ import LabelModule = require("ui/label");
|
|||||||
import PageTestCommon = require("./page-tests-common");
|
import PageTestCommon = require("./page-tests-common");
|
||||||
import helper = require("../helper");
|
import helper = require("../helper");
|
||||||
import frame = require("ui/frame");
|
import frame = require("ui/frame");
|
||||||
|
import types = require("utils/types");
|
||||||
|
|
||||||
global.moduleMerge(PageTestCommon, exports);
|
global.moduleMerge(PageTestCommon, exports);
|
||||||
|
|
||||||
@ -138,4 +139,22 @@ export var test_ChangePageCaching_BeforeNavigated_DoesNotThrow = function () {
|
|||||||
finally {
|
finally {
|
||||||
androidFrame.cachePagesOnNavigate = cachingBefore;
|
androidFrame.cachePagesOnNavigate = cachingBefore;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export var test_Resolve_Fragment_ForPage = function () {
|
||||||
|
var testPage: PageModule.Page;
|
||||||
|
var pageFactory = function () {
|
||||||
|
var testPage = new PageModule.Page();
|
||||||
|
testPage.content = new LabelModule.Label();
|
||||||
|
return testPage;
|
||||||
|
};
|
||||||
|
|
||||||
|
var topFrame = frame.topmost();
|
||||||
|
|
||||||
|
helper.navigate(pageFactory);
|
||||||
|
|
||||||
|
TKUnit.waitUntilReady(() => topFrame.currentPage !== null && topFrame.currentPage === testPage);
|
||||||
|
|
||||||
|
var fragment = topFrame.android.fragmentForPage(testPage);
|
||||||
|
TKUnit.assertFalse(types.isNullOrUndefined(fragment), "Failed to resolve native fragment for page");
|
||||||
}
|
}
|
@ -16,6 +16,7 @@ let FRAMEID = "_frameId";
|
|||||||
let navDepth = -1;
|
let navDepth = -1;
|
||||||
let fragmentId = -1;
|
let fragmentId = -1;
|
||||||
let activityInitialized = false;
|
let activityInitialized = false;
|
||||||
|
const PAGE_FRAGMENT_TAG = "_fragmentTag";
|
||||||
|
|
||||||
function onFragmentShown(fragment: FragmentClass) {
|
function onFragmentShown(fragment: FragmentClass) {
|
||||||
if (trace.enabled) {
|
if (trace.enabled) {
|
||||||
@ -33,8 +34,9 @@ function onFragmentShown(fragment: FragmentClass) {
|
|||||||
// TODO: consider putting entry and page in queue so we can safely extract them here. Pass the index of current navigation and extract it from here.
|
// TODO: consider putting entry and page in queue so we can safely extract them here. Pass the index of current navigation and extract it from here.
|
||||||
// After extracting navigation info - remove this index from navigation stack.
|
// After extracting navigation info - remove this index from navigation stack.
|
||||||
var frame = fragment.frame;
|
var frame = fragment.frame;
|
||||||
var entry: definition.BackstackEntry = fragment.entry;
|
var entry = fragment.entry;
|
||||||
var page: pages.Page = entry.resolvedPage;
|
var page = entry.resolvedPage;
|
||||||
|
page[PAGE_FRAGMENT_TAG] = entry.fragmentTag;
|
||||||
|
|
||||||
let currentNavigationContext;
|
let currentNavigationContext;
|
||||||
let navigationQueue = (<any>frame)._navigationQueue;
|
let navigationQueue = (<any>frame)._navigationQueue;
|
||||||
@ -70,6 +72,7 @@ function onFragmentHidden(fragment: FragmentClass, destroyed: boolean) {
|
|||||||
|
|
||||||
var isBack = fragment.entry.isBack;
|
var isBack = fragment.entry.isBack;
|
||||||
fragment.entry.isBack = undefined;
|
fragment.entry.isBack = undefined;
|
||||||
|
fragment.entry.resolvedPage[PAGE_FRAGMENT_TAG] = undefined;
|
||||||
|
|
||||||
// Handle page transitions.
|
// Handle page transitions.
|
||||||
transitionModule._onFragmentHidden(fragment, isBack, destroyed);
|
transitionModule._onFragmentHidden(fragment, isBack, destroyed);
|
||||||
@ -512,6 +515,20 @@ class AndroidFrame extends Observable implements definition.AndroidFrame {
|
|||||||
// can go back only if it is not the main one.
|
// can go back only if it is not the main one.
|
||||||
return this.activity.getIntent().getAction() !== android.content.Intent.ACTION_MAIN;
|
return this.activity.getIntent().getAction() !== android.content.Intent.ACTION_MAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public fragmentForPage(page: pages.Page): any {
|
||||||
|
if(!page) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
let tag = page[PAGE_FRAGMENT_TAG];
|
||||||
|
if(tag) {
|
||||||
|
let manager = this.activity.getFragmentManager();
|
||||||
|
return manager.findFragmentByTag(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function findPageForFragment(fragment: android.app.Fragment, frame: Frame) {
|
function findPageForFragment(fragment: android.app.Fragment, frame: Frame) {
|
||||||
|
6
tns-core-modules/ui/frame/frame.d.ts
vendored
6
tns-core-modules/ui/frame/frame.d.ts
vendored
@ -294,6 +294,12 @@ declare module "ui/frame" {
|
|||||||
* Gets or sets whether the page UI will be cached when navigating away from the page.
|
* Gets or sets whether the page UI will be cached when navigating away from the page.
|
||||||
*/
|
*/
|
||||||
cachePagesOnNavigate: boolean;
|
cachePagesOnNavigate: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the native android.app.Fragment instance created for the specified Page.
|
||||||
|
* @param page The Page instance to search for.
|
||||||
|
*/
|
||||||
|
fragmentForPage(page: pages.Page): any;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
|
Reference in New Issue
Block a user