在我的应用程序中,我正在使用BottomBar菜单。当快速选择菜单时,我会收到关于崩解的崩溃报告(仅限某些设备)。这是 stacktrace
非致命异常:java.lang.IllegalStateException:无法执行 onSaveInstanceState之后的这个动作 在android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1842) 在android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1860) 在android.support.v4.app.FragmentManagerImpl.popBackStack(FragmentManager.java:781) at com.beco.ibeco.app.MainActivity $ 1.onMenuTabSelected(MainActivity.java:87) 在com.beco.ibeco.app.views.bottombar.BottomBar.notifyMenuListener(BottomBar.java:1239) 在com.beco.ibeco.app.views.bottombar.BottomBar.updateSelectedTab(BottomBar.java:1199) 在com.beco.ibeco.app.views.bottombar.BottomBar.handleClick(BottomBar.java:1161) 在com.beco.ibeco.app.views.bottombar.BottomBar.onClick(BottomBar.java:1149) 在android.view.View.performClick(View.java:5076) 在android.view.View $ PerformClick.run(View.java:20279) 在android.os.Handler.handleCallback(Handler.java:739) 在android.os.Handler.dispatchMessage(Handler.java:95) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5930) 在java.lang.reflect.Method.invoke(Method.java) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1405) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
这是代码
protected void onCreate(Bundle savedInstanceState) {
mActive = true;
super.onCreate(savedInstanceState);
initBottomBar(savedInstanceState);
Intent intent = getIntent();
}
private void initBottomBar(Bundle savedInstanceState) {
mBottomBar = BottomBar.attach(this, savedInstanceState);
mBottomBar.useFixedMode();
mBottomBar.noTabletGoodness();
mBottomBar.setItemsFromMenu(R.menu.bottombar_menu, new OnMenuTabClickListener() {
@Override
public void onMenuTabSelected(@IdRes int menuItemId) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);//line 87
switch (menuItemId) {
case R.id.bottomBarHome:
showStoreList();
break;
case R.id.bottomBarMap:
showMap();
break;
case R.id.bottomBarDeal:
showDeals();
break;
case R.id.bottomBarSettings:
showSettings();
break;
case R.id.bottomBarNotification:
if (mNotificationBadge != null) {
mNotificationBadge.hide();
Beco.getApp().clearBadge();
}
showNotifications();
break;
}
}
@Override
public void onMenuTabReSelected(@IdRes int menuItemId) {
switch (menuItemId) {
case R.id.bottomBarHome:
if (mCurrentTab != HOME)
showStoreList();
break;
case R.id.bottomBarMap:
if (mCurrentTab != MAP)
showMap();
break;
case R.id.bottomBarDeal:
if (mCurrentTab != DEAL)
showDeals();
break;
case R.id.bottomBarNotification:
if(mCurrentTab != NOTIFICATION) {
if (mNotificationBadge != null) {
mNotificationBadge.hide();
mNotificationBadge.setDealItemCount(0);
Beco.getApp().clearBadge();
}
showNotifications();
}
break;
case R.id.bottomBarSettings:
if (mCurrentTab != SETTINGS)
showSettings();
break;
}
}
});
mNotificationBadge = mBottomBar.makeBadgeForTabAt(3, R.color.beco_badge_color, Beco.getApp().getBadgeCount());
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mBottomBar.onSaveInstanceState(outState);
}
如何覆盖此问题?
答案 0 :(得分:2)
创建一个布尔值并检查活动是否不会暂停
@Override
public void onResume() {
super.onResume();
mIsResumed = true;
}
@Override
public void onPause() {
mIsResumed = false;
super.onPause();
}
然后加载片段检查
if(mIsResumed){
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);//line 8
}