登录然后登录 ViewPager - onSaveInstanceState 后无法执行此操作

Logging then loggin in ViewPager - Can not perform this action after onSaveInstanceState

所以我 运行 遇到了 infamous Can not perform this action after onSaveInstanceState 问题,并且很难弄清楚如何解决它。

目前,我可以通过 onNavigationItemSelected 菜单退出我的应用程序来导致它。

  @SuppressWarnings("StatementWithEmptyBody")
  @Override
  public boolean onNavigationItemSelected(MenuItem item) {
    FirebaseAuth.getInstance().signOut();
    goToLogin();

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
  }

  private void goToLogin() {
    Intent x = new Intent(MainActivity.this, LoginActivity.class);
    startActivity(x);
    finish();
  }

虽然当我重新登录到应用程序时

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivityForResult(intent, REQUEST_SIGNUP);
finish();

然后尝试单击回收站查看项目

CompletedViewPagerFragment completedViewPagerFragment = new CompletedViewPagerFragment();
Bundle bundle = new Bundle();
bundle.putInt(CompletedViewPagerFragment.KEY_COMPLETED_SELECTED, index);
completedViewPagerFragment.setArguments(bundle);

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.placeholder, completedViewPagerFragment, VIEWPAGER_FRAGMENT);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

我收到 onSaveInstanceState 错误

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1832)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1850)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:643)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:603)
at com.example.jack.mhealth.MainActivity.onRecordingSelected(MainActivity.java:295)

我尝试使用 .commitAllowingStateLoss() 尽管这给了我一个 activity has been destroyed 错误

java.lang.IllegalStateException: Activity has been destroyed
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1854)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:643)
at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:608)
at com.example.jack.mhealth.MainActivity.onRecordingSelected(MainActivity.java:294)

我真的不知道在注销和完成 MainActivity 之间出了什么问题,然后重新登录并导致 ViewPager 中断。

当应用程序新鲜时,它会直接进入登录屏幕,然后从 MainActivity:75 登录,它在登录时按预期工作。我需要以某种方式重置视图寻呼机吗?

我本来打算删除这个问题,因为我发现了错误,但我想 post 我的解决方案只是为了防止其他人遇到这个问题。

我的错误是我使用单例 class 来保存视图寻呼机适配器

(我不记得我为什么要使用单例 class 但这是导致错误的原因。)