Skip to content

Commit 737f394

Browse files
committed
fix: tab item child fm retrieval
1 parent 55fc0e4 commit 737f394

2 files changed

Lines changed: 24 additions & 18 deletions

File tree

tns-core-modules/ui/core/view/view.android.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ export class View extends ViewCommon {
273273
let manager = this._manager;
274274
if (!manager) {
275275
let view: View = this;
276-
let frameOrTabFound = false;
276+
let frameOrTabViewItemFound = false;
277277
while (view) {
278278
// when interacting with nested fragments instead of using getSupportFragmentManager
279279
// we must always use getChildFragmentManager instead;
@@ -292,12 +292,12 @@ export class View extends ViewCommon {
292292
// - frame1 -> tabview (tabview uses frame1 CHILD fm)
293293
// - frame1 -> tabview -> frame2 (tabview uses frame1 CHILD fm; frame2 uses tabview item CHILD fm)
294294
if (view._hasFragments) {
295-
if (frameOrTabFound) {
295+
if (frameOrTabViewItemFound) {
296296
manager = view._getChildFragmentManager();
297297
break;
298298
}
299299

300-
frameOrTabFound = true;
300+
frameOrTabViewItemFound = true;
301301
}
302302

303303
// the case is needed because _dialogFragment is on View

tns-core-modules/ui/tab-view/tab-view.android.ts

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,10 @@ export class TabViewItem extends TabViewItemBase {
260260
public index: number;
261261
private _defaultTransformationMethod: android.text.method.TransformationMethod;
262262

263+
get _hasFragments(): boolean {
264+
return true;
265+
}
266+
263267
public initNativeView(): void {
264268
super.initNativeView();
265269
if (this.nativeViewProtected) {
@@ -297,6 +301,23 @@ export class TabViewItem extends TabViewItemBase {
297301
}
298302
}
299303

304+
public _getChildFragmentManager(): android.support.v4.app.FragmentManager {
305+
const tabView = this.parent as TabView;
306+
let tabFragment = null;
307+
for (let fragment of tabView._getFragmentManager().getFragments().toArray()) {
308+
if (fragment.index === this.index) {
309+
tabFragment = fragment;
310+
break;
311+
}
312+
}
313+
314+
if (!tabFragment) {
315+
throw new Error(`Could not get child fragment manager for tab item with index ${this.index}`);
316+
}
317+
318+
return tabFragment.getChildFragmentManager();
319+
}
320+
300321
[fontSizeProperty.getDefault](): { nativeSize: number } {
301322
return { nativeSize: this.nativeViewProtected.getTextSize() };
302323
}
@@ -361,21 +382,6 @@ export class TabView extends TabViewBase {
361382
tabs.push(new WeakRef(this));
362383
}
363384

364-
get _hasFragments(): boolean {
365-
return true;
366-
}
367-
368-
public _getChildFragmentManager(): android.support.v4.app.FragmentManager {
369-
if (this._pagerAdapter) {
370-
const fragment: android.support.v4.app.Fragment = (<any>this._pagerAdapter).mCurrentPrimaryItem;
371-
if (fragment && fragment.isAdded()) {
372-
return fragment.getChildFragmentManager();
373-
}
374-
}
375-
376-
return null;
377-
}
378-
379385
public onItemsChanged(oldItems: TabViewItem[], newItems: TabViewItem[]): void {
380386
super.onItemsChanged(oldItems, newItems);
381387

0 commit comments

Comments
 (0)