代码里面用如下的业务场景:进页面并判断是否签到,没有签到就跳转至一个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在屏幕旋转时会保留其状态,如果需要在旋转后重新显示对话框,可以将DialogFragment的show()方法放在onSaveInstanceState()中保存的状态里,在onCreate()或onActivityCreated()中...
在Android开发中,DialogFragment是Fragment的一个子类,它提供了创建对话框式界面的功能。相比传统的AlertDialog,DialogFragment更易于管理生命周期,与Activity的交互也更为灵活。本教程将深入探讨DialogFragment...
在Android开发中,DialogFragment是一种非常重要的组件,它结合了Fragment和对话框的功能,使得开发者可以在应用程序中创建具有丰富交互性的对话框。本教程通过一个名为"DialogFragmentDemo"的示例项目,深入探讨...
在Android开发中,`DialogFragment`是用于展示对话框式界面的一种组件,它继承自`Fragment`类。在本项目中,“附加动画的DialogFragment”指的是在标准的`DialogFragment`基础上添加了特殊的动画效果,使得对话框的...
在Android应用开发中,`DialogFragment`是对话框的一个组件,它是`Fragment`的一个子类,可以方便地在Activity中展示对话框样式的通知或交互。`DialogFragment`提供了与用户进行交互的方式,同时保持了与Android碎片...
4. 显示FragmentDialog:在监听器的回调方法中,调用`FragmentManager`的`beginTransaction()`方法,添加DialogFragment到当前的Activity中,并调用`commit()`提交事务。 在Demo_FragmentDialog这个示例项目中,...
在Android开发中,`DialogFragment`是一个非常重要的组件,它结合了Fragment的功能和Dialog的特点,使得在应用程序中显示对话框变得更加灵活和易于管理。本文将深入探讨`DialogFragment`的自定义过程,以及如何处理...
在Android开发中,`DialogFragment`是一个非常实用的组件,它允许我们以模态对话框的形式展示内容。本文将深入探讨如何使用`DialogFragment`,并结合接口回调机制来实现更复杂的交互。首先,让我们理解`...
在Android开发中,Dialog和DialogFragment是两种常用的用于创建弹出式对话框的组件。它们在用户界面交互中扮演着重要角色,允许用户在主应用界面之外进行一些操作而不离开当前活动。这篇博客深入探讨了这两者的源码...
在Android 3.0(API级别11)引入了`DialogFragment`,它是`Fragment`的一个子类,使得在Activity中管理对话框变得更加方便和灵活。本篇将详细介绍如何封装`DialogFragment`来创建一个通用的、可复用的`Dialog`组件,...
在Android开发中,`DialogFragment`是用于展示对话框的一种组件,它是`Fragment`的子类,继承了`Dialog`的功能并集成了`Fragment`的生命周期管理。在本笔记中,我们将深入探讨如何在Android应用中有效地使用`...
**DialogFragment 使用总结** 在Android应用开发中,`DialogFragment`是用于展示对话框的类,它是`Fragment`的一个子类,集成了对话框的功能。`DialogFragment`提供了更易于管理、灵活且可定制化的对话框解决方案。...
在Android开发中,DialogFragment是Android SDK提供的一种用于在应用程序中显示对话框的组件。它结合了Fragment的特性,使得对话框可以具有更多的交互性和可定制性,同时保持与Activity的生命周期同步。在这个...
在Android开发中,有时我们需要创建一个可自定义的弹出窗口来展示信息,这通常可以通过使用`DialogFragment`实现。`DialogFragment`是Android提供的一个类,它扩展了`Fragment`,并添加了对话框样式的特性。在这个...
对dialogFragment进行封装,包装。并对弹窗进行统一管理。包含弹窗的c++语言的背景模糊调用,dialog消亡后,内存的快速回收,提高效率。统一处理dissmiss事件。方便复杂的dialog功能需求。 调用方式 application中 ...
在Android开发中,DialogFragment是一种常用的组件,它继承自Fragment并提供了对话框的功能。当我们需要在应用中实现底部弹出框分享效果时,DialogFragment是一个理想的选择。本篇将详细介绍如何利用自定义...
接下来,要在Activity中显示DialogFragment,我们需要先创建DialogFragment的实例,然后调用`show()`方法将其添加到当前的活动栈中: ```java DialogFragment dialogFragment = new MyDialogFragment(); ...
在Android开发中,DialogFragment是一种常用的组件,它继承自Fragment并添加了对话框的功能。当需要在应用中显示一个模态对话框,DialogFragment提供了一种优雅的方式,它可以包含任何视图,包括加载多张图片。本文...