Android浏览器之间的切换会导致Android崩溃 [英] Android Switching between Viewpager produces Android crash

查看:219
本文介绍了Android浏览器之间的切换会导致Android崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在视图寻呼机中有五个片段。其中一个是BarcodeFragment BarcodeFragment ,当我在ViewPager片段之间快速扫描时,我遇到了一个非常奇怪的Android崩溃。我得到的崩溃是在android的一面。这是日志。

  java.lang.IndexOutOfBoundsException:无效的索引7,大小为7 
在java.util.ArrayList.throwIndexOutOfBoundsException( ArrayList.java:255)
在java.util.ArrayList.set(ArrayList.java:481)
在android.support.v4.app.FragmentManagerImpl.makeInactive(FragmentManager.java:1169)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1078)
在android.support.v4.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1212)
在android .support.v4.app.BackStackRecord.run(BackStackRecord.java:652)
在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
在android.support.v4 .app.FragmentManagerImpl $ 1.run(FragmentManager.java:446)
在android.os.Handler.handleCallback(Handler.java:733)
在android.os.Handler.dispatchMessage(Handler.java: 95)
在android.os.Looper.loop(Looper.java:136)
在android.app.ActivityThread.main(ActivityThread.java:5001)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)

我怀疑它的发生是因为以下原因:
每当我在barcodeFragment时,我想切换到viewpager中的另一个片段,我删除片段使用以下代码:

  if(getChildFragmentManager()。findFragmentById(R.id.barcode_Fragment)!= null){
if(mBarcodeFragment!= null&&& mBarcodeFragment.isResumed()){
mBarcodeFragment.onDestroy();
mFragmentManager.beginTransaction()。remove(mBarcodeFragment).commitAllowingStateLoss();
mBarcodeFragment = null;
}
}

每当我回到BaseScanFragment是调用条形码片段的片段),我通过以下代码再次添加片段:

  mBarcodeFragment = new BarcodeFragment (); 
getChildFragmentManager()。beginTransaction()。replace(R.id.barcode_Fragment,mBarcodeFragment).commit();
mBarcodeFragment.setDecodeFor(IScanResultHandler.MODE.SHOP_NOW_MODE);
mBarcodeFragment.setScanResultHandler((IScanResultHandler)getSherlockActivity());

任何人都可以猜测问题是什么?

解决方案

在处理嵌套片段时,我早些时候面临过这个问题。在我的情况下,这是因为我使用错误的片段管理器,即我不小心使用Activity片段管理器进行子片段事务。

  java.lang.IndexOutOfBoundsException:索引号无效7,大小为7 

索引指向片段发生这种错误,即7。


I have five fragments in an View pager. One of them is a BarcodeFragment BarcodeFragment and I am getting a very weird android crash when I swipe between ViewPager fragments quickly. The crash Im getting is on the android side. This is the log.

java.lang.IndexOutOfBoundsException: Invalid index 7, size is 7
            at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
            at java.util.ArrayList.set(ArrayList.java:481)
            at android.support.v4.app.FragmentManagerImpl.makeInactive(FragmentManager.java:1169)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1078)
            at android.support.v4.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1212)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:652)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
            at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

I suspect its happening because of the following : Whenever I am at the barcodeFragment and I want to switch to another fragment in the viewpager I remove the fragment using the following code:

if (getChildFragmentManager().findFragmentById(R.id.barcode_Fragment) != null) {
                if (mBarcodeFragment != null && mBarcodeFragment.isResumed()) {
                    mBarcodeFragment.onDestroy();
                    mFragmentManager.beginTransaction().remove(mBarcodeFragment).commitAllowingStateLoss();
                    mBarcodeFragment = null;
                }
            }

And whenever I am coming back to the BaseScanFragment (Which is the fragment which calls the Barcode Fragment) , I am adding the fragment again through the following code.:

mBarcodeFragment = new BarcodeFragment();
    getChildFragmentManager().beginTransaction().replace(R.id.barcode_Fragment, mBarcodeFragment).commit();
    mBarcodeFragment.setDecodeFor(IScanResultHandler.MODE.SHOP_NOW_MODE);
    mBarcodeFragment.setScanResultHandler((IScanResultHandler) getSherlockActivity());

Can anyone guess what the problem is?

解决方案

I have faced this problem earlier when I was working with nested fragments. In my case it was occurring because I was using the wrong Fragment manager i.e I was accidentally using the Activity fragment manager for child fragment transactions

java.lang.IndexOutOfBoundsException: Invalid index 7, size is 7

The index points to the fragment in which this error is occurring i.e 7.

这篇关于Android浏览器之间的切换会导致Android崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆