`

调用DialogFragment出现的Can not perform this action after onSaveInstanceState

阅读更多
代码里面用如下的业务场景:进页面并判断是否签到,没有签到就跳转至一个DialogFragment

最开始的做法是如下:
SignInFragment signInFragment = new SignInFragment();

signInFragment.setTargetFragment(LauncherFragment.this,ConstantNewValue.FRAGMENT_RESPONSE_CODE_SIGN);

signInFragment.show(getActivity().getSupportFragmentManager(), "signInFragment");


结果报错
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
    at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1377)
    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1395)
    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:637)
    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:616)
    at android.support.v4.app.DialogFragment.show(DialogFragment.java:139)
    at com.gty.ryt.admin.fragment.LauncherFragment$2.onNext(LauncherFragment.java:112)
    at com.gty.ryt.admin.subscribers.ProgressSubscriber.onNext(ProgressSubscriber.java:75)
    at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:134)
    at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:224)
    at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5288)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:915)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:710)


检查发现show()方法调用的还是fragment.commit()的方法
    public void show(FragmentManager manager, String tag) {
        mDismissed = false;
        mShownByMe = true;
        FragmentTransaction ft = manager.beginTransaction();
        ft.add(this, tag);
        ft.commit();
    }


所以针对DialogFragment修改如下
SignInFragment signInFragment = new SignInFragment();                                  

signInFragment.setTargetFragment(LauncherFragment.this,ConstantNewValue.FRAGMENT_RESPONSE_CODE_SIGN);                        

holder.fragmentManager.beginTransaction().add(signInFragment,"signInFragment").commitAllowingStateLoss();
分享到:
评论

相关推荐

    使用DialogFragment替代AlertDialog

    对于屏幕旋转问题,DialogFragment在屏幕旋转时会保留其状态,如果需要在旋转后重新显示对话框,可以将DialogFragment的show()方法放在onSaveInstanceState()中保存的状态里,在onCreate()或onActivityCreated()中...

    DialogFragment的使用及利用自定义interface点击事件并解决旋转屏幕点击事件失效问题

    在Android开发中,DialogFragment是Fragment的一个子类,它提供了创建对话框式界面的功能。相比传统的AlertDialog,DialogFragment更易于管理生命周期,与Activity的交互也更为灵活。本教程将深入探讨DialogFragment...

    各种Dialogfragment功能demo

    在Android开发中,DialogFragment是一种非常重要的组件,它结合了Fragment和对话框的功能,使得开发者可以在应用程序中创建具有丰富交互性的对话框。本教程通过一个名为"DialogFragmentDemo"的示例项目,深入探讨...

    附加动画的DialogFragment

    在Android开发中,`DialogFragment`是用于展示对话框式界面的一种组件,它继承自`Fragment`类。在本项目中,“附加动画的DialogFragment”指的是在标准的`DialogFragment`基础上添加了特殊的动画效果,使得对话框的...

    android开发DialogFragment实例

    在Android应用开发中,`DialogFragment`是对话框的一个组件,它是`Fragment`的一个子类,可以方便地在Activity中展示对话框样式的通知或交互。`DialogFragment`提供了与用户进行交互的方式,同时保持了与Android碎片...

    ListView触发FragmentDialog

    4. 显示FragmentDialog:在监听器的回调方法中,调用`FragmentManager`的`beginTransaction()`方法,添加DialogFragment到当前的Activity中,并调用`commit()`提交事务。 在Demo_FragmentDialog这个示例项目中,...

    DialogFragment

    在Android开发中,`DialogFragment`是一个非常重要的组件,它结合了Fragment的功能和Dialog的特点,使得在应用程序中显示对话框变得更加灵活和易于管理。本文将深入探讨`DialogFragment`的自定义过程,以及如何处理...

    DialogFragment+接口回调

    在Android开发中,`DialogFragment`是一个非常实用的组件,它允许我们以模态对话框的形式展示内容。本文将深入探讨如何使用`DialogFragment`,并结合接口回调机制来实现更复杂的交互。首先,让我们理解`...

    Dialog 和DialogFragment源码

    在Android开发中,Dialog和DialogFragment是两种常用的用于创建弹出式对话框的组件。它们在用户界面交互中扮演着重要角色,允许用户在主应用界面之外进行一些操作而不离开当前活动。这篇博客深入探讨了这两者的源码...

    dialog 封装DialogFragment来实现的, 通用dialog

    在Android 3.0(API级别11)引入了`DialogFragment`,它是`Fragment`的一个子类,使得在Activity中管理对话框变得更加方便和灵活。本篇将详细介绍如何封装`DialogFragment`来创建一个通用的、可复用的`Dialog`组件,...

    android中DialogFragment的使用笔记

    在Android开发中,`DialogFragment`是用于展示对话框的一种组件,它是`Fragment`的子类,继承了`Dialog`的功能并集成了`Fragment`的生命周期管理。在本笔记中,我们将深入探讨如何在Android应用中有效地使用`...

    dialogfragment使用总结

    **DialogFragment 使用总结** 在Android应用开发中,`DialogFragment`是用于展示对话框的类,它是`Fragment`的一个子类,集成了对话框的功能。`DialogFragment`提供了更易于管理、灵活且可定制化的对话框解决方案。...

    DialogFragment示例

    在Android开发中,DialogFragment是Android SDK提供的一种用于在应用程序中显示对话框的组件。它结合了Fragment的特性,使得对话框可以具有更多的交互性和可定制性,同时保持与Activity的生命周期同步。在这个...

    Android中在DialogFragment内使用TabLayout+ViewPager

    在Android开发中,有时我们需要创建一个可自定义的弹出窗口来展示信息,这通常可以通过使用`DialogFragment`实现。`DialogFragment`是Android提供的一个类,它扩展了`Fragment`,并添加了对话框样式的特性。在这个...

    dialogFragment弹窗处理器,背景模糊处理

    对dialogFragment进行封装,包装。并对弹窗进行统一管理。包含弹窗的c++语言的背景模糊调用,dialog消亡后,内存的快速回收,提高效率。统一处理dissmiss事件。方便复杂的dialog功能需求。 调用方式 application中 ...

    自定义dialogfragment 底部弹出框 实现分享效果

    在Android开发中,DialogFragment是一种常用的组件,它继承自Fragment并提供了对话框的功能。当我们需要在应用中实现底部弹出框分享效果时,DialogFragment是一个理想的选择。本篇将详细介绍如何利用自定义...

    [Android分享] DialogFragment初次了解学习

    接下来,要在Activity中显示DialogFragment,我们需要先创建DialogFragment的实例,然后调用`show()`方法将其添加到当前的活动栈中: ```java DialogFragment dialogFragment = new MyDialogFragment(); ...

    dialogfragment加载多张图片

    在Android开发中,DialogFragment是一种常用的组件,它继承自Fragment并添加了对话框的功能。当需要在应用中显示一个模态对话框,DialogFragment提供了一种优雅的方式,它可以包含任何视图,包括加载多张图片。本文...

Global site tag (gtag.js) - Google Analytics