代码里面用如下的业务场景:进页面并判断是否签到,没有签到就跳转至一个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进行封装,包装。并对弹窗进行统一管理。包含弹窗的c++语言的背景模糊调用,dialog消亡后,内存的快速回收,提高效率。统一处理dissmiss事件。方便复杂的dialog功能需求。 调用方式 application中 ...
相关博客:【android学习开源项目之AndroidAutoSize】AndroidAutoSize和DialogFragment的适配 https://blog.csdn.net/ljb568838953/article/details/103906449; 本demo的知识点:1.AndroidAutoSize 的使用(今日...
demo中讲解了各种Dialogfragment功能
类似PopupWindow的弹框DialogFragment实现TabLayout+ViewPager多个Fragment左右滑动切换
listview中如何解决item中有button,imageButton冲突的解决和item触发fragmenDialog,如果没有积分可以@我,发送!
Google官方推荐使用DialogFragment代替AlertDialog,很好的解决屏幕旋转产生的问题。。。
Android中基于DialogFragment实现的Dialog提示功能,附加了nice的动画效果。
android当中DialogFragment的简单使用,配合博客的代码
DialogFragment嵌套ViewPager
Android DialogFragment的使用方法 ,google官方推荐使用DialogFragment代替Dialog. 具体的详细解释可以在我的博客http://blog.csdn.net/a253664942/article/details/45585661中看看,有问题的可以我给留言!
blog原文 http://blog.csdn.net/qiaoidea/article/details/46402845 讲解分析 Dialog 和DialogFragment
DialogFragment在android 3.0时被引入。是一种特殊的Fragment。在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。
学习使用DialogFragment,示例比官网的更易懂。
此demo里含有所有dialogfragment的使用demo
本实例尽量做到实现该功能的最小实例,换句话说就是,尽量去掉与实现该功能无法的代码从而使我们更容易的看到实现该功能的核心。
使用dialogfragment加载多张图片