java.lang.StackOverflowError: stack size 8MB

问题:

java.lang.StackOverflowError: stack size 8MB
                                                                                     at android.os.Handler.sendMessageAtTime(Handler.java:630)
                                                                                     at android.view.ViewRootImpl$ViewRootHandler.sendMessageAtTime(ViewRootImpl.java:3709)
                                                                                     at android.os.Handler.sendMessageDelayed(Handler.java:600)
                                                                                     at android.view.ViewRootImpl.dispatchInvalidateDelayed(ViewRootImpl.java:6872)
                                                                                     at 
***********************************************

发生的场景:
使用一个第三方框架navigationtabbar,底部导航栏配合Fragment切换的时候出现的错误,而且这个错误在Android8.0之前不会出现,昨天升级了模拟器,在Android8.0模拟器上出现的,说明代码在Android8.0上面运行还是有点问题。具体报错的那一行是:

 mNavigationTabBar.setModelIndex(currentIndex);

我是在showFragment的时候写这行代码的:

private void showFragment(int currentIndex){
        mNavigationTabBar.setModelIndex(currentIndex);
        hideAllFragment();
        switch (currentIndex){
            case 0:
                FragmentUtils.show(mHeartFragment);
                break;
            case 1:
                FragmentUtils.show(mCupFragment);
                break;
            case 2:
                FragmentUtils.show(mDiplomaFragment);
                break;
            case 3:
                FragmentUtils.show(mFlagFragment);
                break;
            case 4:
                FragmentUtils.show(medalFragment);
                break;
        }

    }

而调用showFragment方法的主要场景是在NavigationTabBar的一个监听方法里(NavigationTabBar.OnTabBarSelectedIndexListener)的回调:

 @Override
    public void onEndTabSelected(NavigationTabBar.Model model, int index) {
        switch (index){
            case 0:
                mCurrentIndex = 0;
                showFragment(0);
                break;
            case 1:
                mCurrentIndex = 1;
                showFragment(1);
                break;
            case 2:
                mCurrentIndex = 2;
                showFragment(2);
                break;
            case 3:
                mCurrentIndex = 3;
                showFragment(3);
                break;
            case 4:
                mCurrentIndex = 4;
                showFragment(4);
                break;
        }
    }

网上说的出现java.lang.StackOverflowError: stack size 8MB错误的原因是:

在fragment中
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
方法中加载一个布局文件View view = inflater.inflate(R.layout.fragment_home, container);中把container改成null

试了没有。

我想的是,既然已经是在onEndTabSelected方法里了,说明已经对底部导航栏的item进行了切换了,不需要在额外对item切换进行操作,所以我把下面报错这行代码删除了:

 mNavigationTabBar.setModelIndex(currentIndex);

果然删除之后,在Android8.0模拟器上运行就没问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值