1 问题

主页面3个Fragment,在第三个Fragment里面开启了Activity之后,然后想跳到第一个Fragment代码如下

    /**     * 展示Fragment     */    private fun showFragment(fragment: Fragment) {        if (currentFragment !== fragment) {            val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()            transaction.hide(currentFragment)            currentFragment = fragment            if (!fragment.isAdded) {                transaction.add(R.id.mainFrameLayout, fragment).show(fragment).commit()            } else {                transaction.show(fragment).commit()            }        }    }

然后奔溃错误提示如下

    java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState        at androidx.fragment.app.FragmentManagerImpl.checkStateLoss(FragmentManagerImpl.java:1536)        at androidx.fragment.app.FragmentManagerImpl.enqueueAction(FragmentManagerImpl.java:1558)        at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:317)        at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:282)        at com.appsinnova.android.keepdrop.home.MainActivity.showFragment(MainActivity.kt:671)        at com.appsinnova.android.keepdrop.home.MainActivity.updateMain(MainActivity.kt:286)        at java.lang.reflect.Method.invoke(Native Method)        at org.greenrobot.eventbus.EventBus.invokeSubscriber(EventBus.java:507)        at org.greenrobot.eventbus.EventBus.postToSubscription(EventBus.java:434)        at org.greenrobot.eventbus.EventBus.postSingleEventForEventType(EventBus.java:411)        at org.greenrobot.eventbus.EventBus.postSingleEvent(EventBus.java:384)        at org.greenrobot.eventbus.EventBus.post(EventBus.java:265)        at org.greenrobot.eventbus.EventBus.postSticky(EventBus.java:306)        at com.appsinnova.android.keepdrop.fragment.MyVedioLikeListFragment$onCreateView$1.onClick(MyVedioLikeListFragment.kt:70)        at android.view.View.performClick(View.java:6659)        at android.view.View.performClickInternal(View.java:6631)        at android.view.View.access$3100(View.java:790)        at android.view.View$PerformClick.run(View.java:26187)        at android.os.Handler.handleCallback(Handler.java:907)        at android.os.Handler.dispatchMessage(Handler.java:105)        at android.os.Looper.loop(Looper.java:216)        at android.app.ActivityThread.main(ActivityThread.java:7625)        at java.lang.reflect.Method.invoke(Native Method)        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

 

 

 

 

 

 

2 解决办法

onSaveInstanceState方法是在该Activity即将被销毁前调用,来保存Activity数据的,如果在保存玩状态后 再给它添加Fragment就会出错。解决办法就是把commit()方法替换成 commitAllowingStateLoss()

    fun newshowFragment(fragment: Fragment) {        if (currentFragment !== fragment) {            val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()            transaction.hide(currentFragment)            currentFragment = fragment            if (!fragment.isAdded) {                transaction.add(R.id.mainFrameLayout, fragment).show(fragment).commitAllowingStateLoss()            } else {                transaction.show(fragment).commitAllowingStateLoss()            }        }    }

 

更多相关文章

  1. Android中多USB摄像头解决方案——UVCCamera
  2. 【学习笔记】Android中Service通信
  3. 最新Android面试题整理 5月
  4. Flutter 与 Native 混合开发
  5. Android(安卓)4.4 KitKat NotificationManagerService使用详解与
  6. Android(安卓)Studio中使用java8
  7. android 自定义Toast,可设定显示时间
  8. 如何将当前布局用代码保存在png图像文件中?
  9. android学习笔记(一) 遍历SD卡中所有文件并在listview中显示

随机推荐

  1. android 编译之后的文件系统和内核
  2. 编译FFMpeg的Android版本,并整合到android
  3. Android(安卓)init.rc BOOTCLASSPATH
  4. Android(安卓)SharedPreferences保存登录
  5. Android(安卓)用style简化layout布局文件
  6. android延迟执行任务(刷新按钮旋转)
  7. android 访问网络不能在主线程中进行以及
  8. 安装和卸载Android应用程序(apk包)
  9. android NDK JNI
  10. Android中使用jdbc连接Sqllite