popBackStack

时间:2017-10-17 12:20:03

标签: android

在我的应用程序中,我正在使用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);
    }  

如何覆盖此问题?

1 个答案:

答案 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
}