登录然后登录 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 但这是导致错误的原因。)
所以我 运行 遇到了 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 但这是导致错误的原因。)