NativeScript / NativeScript

⚡ Empowering JavaScript with native platform APIs. ✨ Best of all worlds (TypeScript, Swift, Objective C, Kotlin, Java, Dart). Use what you love ❤️ Angular, Capacitor, Ionic, React, Solid, Svelte, Vue with: iOS (UIKit, SwiftUI), Android (View, Jetpack Compose), Dart (Flutter) and you name it compatible.
https://nativescript.org
MIT License
24.2k stars 1.64k forks source link

ModalStack -> Tabs -> Tabs: Cannot detach Fragment attached to a different FragmentManager #9034

Open anton-cheloshkin opened 3 years ago

anton-cheloshkin commented 3 years ago

CLI v6.7.8 on path 'tns' "nativescript-vue": "^2.6.1"

this issue actual in case BackButton is pressed. where i tap outside ModalStack, all works fine

stack:

System.err: An uncaught Exception occurred on "main" thread.
System.err: Calling js method destroyItem failed
System.err: Error: java.lang.IllegalStateException: Cannot detach Fragment attached to a different FragmentManager. Fragment FragmentBase_vendor_45064_26_TabFragmentImplementation{d92224 (668436da-6af1-4d4b-8b32-a5a45e6c5fed) id=0x6 android:viewpager:6:0} is already attached to a FragmentManager.
System.err: 
System.err: StackTrace:
System.err: FragmentPagerAdapter.destroyItem(file: node_modules\@nativescript\core\ui\tabs\tabs.android.js:152:37)
System.err:     at Tabs.setItems(file: node_modules\@nativescript\core\ui\tabs\tabs.android.js:456:31)
System.err:     at Tabs.onUnloaded(file: node_modules\@nativescript\core\ui\tabs\tabs.android.js:400:13)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:91)
System.err:     at ViewBase.callFunctionWithSuper(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:310:8)
System.err:     at ViewBase.callUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:13)
System.err:     at ViewBase.unloadView(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:464:17)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:247:18)
System.err:     at LayoutBaseCommon.eachChildView(file: node_modules\@nativescript\core\ui\layouts\layout-base-common.js:125:25)
System.err:     at ViewCommon.eachChild(file: node_modules\@nativescript\core\ui\core\view\view-common.js:925:13)
System.err:     at ViewBase.onUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:246:13)
System.err:     at View.onUnloaded(file: node_modules\@nativescript\core\ui\core\view\view.android.js:262:36)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:91)
System.err:     at ViewBase.callFunctionWithSuper(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:310:8)
System.err:     at ViewBase.callUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:13)
System.err:     at ViewBase.unloadView(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:464:17)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:247:18)
System.err:     at LayoutBaseCommon.eachChildView(file: node_modules\@nativescript\core\ui\layouts\layout-base-common.js:125:25)
System.err:     at ViewCommon.eachChild(file: node_modules\@nativescript\core\ui\core\view\view-common.js:925:13)
System.err:     at ViewBase.onUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:246:13)
System.err:     at View.onUnloaded(file: node_modules\@nativescript\core\ui\core\view\view.android.js:262:36)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:91)
System.err:     at ViewBase.callFunctionWithSuper(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:310:8)
System.err:     at ViewBase.callUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:13)
System.err:     at ViewBase.unloadView(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:464:17)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:247:18)
System.err:     at TabContentItemBase.eachChild(file: node_modules\@nativescript\core\ui\tab-navigation-base\tab-content-item\tab-content-item-common.js:12:12)
System.err:     at ViewBase.onUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:246:13)
System.err:     at View.onUnloaded(file: node_modules\@nativescript\core\ui\core\view\view.android.js:262:36)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:91)
System.err:     at ViewBase.callFunctionWithSuper(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:310:8)
System.err:     at ViewBase.callUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:13)
System.err:     at ViewBase.unloadView(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:464:17)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:247:18)
System.err:     at (file: node_modules\@nativescript\core\ui\tab-navigation-base\tab-navigation-base\tab-navigation-base.js:51:16)
System.err:     at TabNavigationBase.eachChild(file: node_modules\@nativescript\core\ui\tab-navigation-base\tab-navigation-base\tab-navigation-base.js:50:18)
System.err:     at ViewBase.onUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:246:13)
System.err:     at View.onUnloaded(file: node_modules\@nativescript\core\ui\core\view\view.android.js:262:36)
System.err:     at Tabs.onUnloaded(file: node_modules\@nativescript\core\ui\tabs\tabs.android.js:399:36)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:91)
System.err:     at ViewBase.callFunctionWithSuper(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:310:8)
System.err:     at ViewBase.callUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:13)
System.err:     at ViewBase.unloadView(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:464:17)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:247:18)
System.err:     at LayoutBaseCommon.eachChildView(file: node_modules\@nativescript\core\ui\layouts\layout-base-common.js:125:25)
System.err:     at ViewCommon.eachChild(file: node_modules\@nativescript\core\ui\core\view\view-common.js:925:13)
System.err:     at ViewBase.onUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:246:13)
System.err:     at View.onUnloaded(file: node_modules\@nativescript\core\ui\core\view\view.android.js:262:36)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:91)
System.err:     at ViewBase.callFunctionWithSuper(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:310:8)
System.err:     at ViewBase.callUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:13)
System.err:     at ViewBase.unloadView(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:464:17)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:247:18)
System.err:     at LayoutBaseCommon.eachChildView(file: node_modules\@nativescript\core\ui\layouts\layout-base-common.js:125:25)
System.err:     at ViewCommon.eachChild(file: node_modules\@nativescript\core\ui\core\view\view-common.js:925:13)
System.err:     at ViewBase.onUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:246:13)
System.err:     at View.onUnloaded(file: node_modules\@nativescript\core\ui\core\view\view.android.js:262:36)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:91)
System.err:     at ViewBase.callFunctionWithSuper(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:310:8)
System.err:     at ViewBase.callUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:13)
System.err:     at ViewBase.unloadView(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:464:17)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:247:18)
System.err:     at LayoutBaseCommon.eachChildView(file: node_modules\@nativescript\core\ui\layouts\layout-base-common.js:125:25)
System.err:     at ViewCommon.eachChild(file: node_modules\@nativescript\core\ui\core\view\view-common.js:925:13)
System.err:     at ViewBase.onUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:246:13)
System.err:     at View.onUnloaded(file: node_modules\@nativescript\core\ui\core\view\view.android.js:262:36)
System.err:     at (file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:91)
System.err:     at ViewBase.callFunctionWithSuper(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:310:8)
System.err:     at ViewBase.callUnloaded(file: node_modules\@nativescript\core\ui\core\view-base\view-base.js:321:13)
System.err:     at CustomDialogFragmentImpl.onDismiss(file: node_modules\nativescript-windowed-modal\windowed-modal.android.js:131:26)
System.err:     at com.tns.Runtime.callJSMethodNative(Native Method)
System.err:     at com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1286)
System.err:     at com.tns.Runtime.callJSMethodImpl(Runtime.java:1173)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1160)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1138)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1134)
System.err:     at com.tns.gen.androidx.viewpager.widget.PagerAdapter_vendor_45136_26_FragmentPagerAdapter.destroyItem(PagerAdapter_vendor_45136_26_FragmentPagerAdapter.java:45)
System.err:     at androidx.viewpager.widget.ViewPager.dataSetChanged(ViewPager.java:1047)
System.err:     at androidx.viewpager.widget.ViewPager$PagerObserver.onChanged(ViewPager.java:3097)
System.err:     at androidx.viewpager.widget.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:291)
System.err:     at com.tns.Runtime.callJSMethodNative(Native Method)
System.err:     at com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1286)
System.err:     at com.tns.Runtime.callJSMethodImpl(Runtime.java:1173)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1160)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1138)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1134)
System.err:     at androidx.fragment.app.DialogFragment_vendor_109881_28_CustomDialogFragmentImpl.onDismiss(Unknown Source:20)
System.err:     at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1393)
System.err:     at android.os.Handler.dispatchMessage(Handler.java:106)
System.err:     at android.os.Looper.loop(Looper.java:193)
System.err:     at android.app.ActivityThread.main(ActivityThread.java:6762)
System.err:     at java.lang.reflect.Method.invoke(Native Method)
System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
System.err: Caused by: java.lang.IllegalStateException: Cannot detach Fragment attached to a different FragmentManager. Fragment FragmentBase_vendor_45064_26_TabFragmentImplementation{d92224 (668436da-6af1-4d4b-8b32-a5a45e6c5fed) id=0x6 android:viewpager:6:0} is already attached to a FragmentManager.
System.err:     at androidx.fragment.app.BackStackRecord.detach(BackStackRecord.java:221)
System.err:     ... 24 more
<template>
    <ModalStack dismissEnabled="true" class="modal-container">
        <StackLayout class="modal">
            <StackLayout>
                <Tabs
                    :selectedIndex="selectedIndex"
                    @selectedIndexChange="indexChange"
                >
                    <TabStrip> </TabStrip>
                </Tabs>
                <TabContentItem>
                    <Tabs
                        :selectedIndex="selectedIndex"
                        @selectedIndexChange="indexChange"
                    >
                        <TabStrip> </TabStrip>
                    </Tabs>
                    <TabContentItem> </TabContentItem>
                </TabContentItem>
            </StackLayout>
        </StackLayout>
    </ModalStack>
</template>

please, replace: @/nativescript/core/ui/tabs/tabs.android.js@151 this.mCurTransaction.detach(fragment); with

            if(fragment.owner._isLoaded){
                this.mCurTransaction.detach(fragment);
            }
vallemar commented 3 years ago

Same error here

bunkwatata commented 3 years ago

nativescript/core - 7.3.0 same error on tab-view @nativescript\core\ui\tab-view\index.android.js

@anton-cheloshkin , your solution works fine 👍

SidharthPHariharan commented 1 year ago

Facing same issue for past few days, I am working on nativescript angular any tip on what is that mCurrentTransaction object?

SidharthPHariharan commented 1 year ago

I was using tabs and the scenario was like A had tabs and it was just to check the creds, if its already there proceed to B else stay in A. I had a ngIf and this was resolved for the tabs as they were not loaded at all in the first place