2014-09-25 31 views
1

我在View pager中有五個片段。其中之一是BarcodeFragment BarcodeFragment,當我在ViewPager碎片之間快速滑動時,我遇到了非常奇怪的android崩潰。我得到的崩潰是在android側。這是日誌。Android在Viewpager之間切換會產生Android崩潰

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) 

我懷疑它的發生是因爲以下幾點: 每當我在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(這是調用Barcode Fragment的片段)時,我通過以下代碼再次添加片段:

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

任何人都可以猜測問題是什麼?

+0

你爲什麼要以這種方式刪除和添加回片段? ViewPager應該負責管理內部的片段。另外,不要直接調用片段生命週期方法onDestroy。 – Okas 2014-09-25 15:10:56

+0

我必須這樣做,因爲我在其他地方也使用條形碼片段。條形碼片段訪問相機,並且在任何時候只能有一個片段的實例。所以問題是我必須刪除它,然後在每次訪問Scan時添加它。 – SoH 2014-09-25 15:13:13

+0

無論如何,在你的代碼中調用mBarcodeFragment.onDestroy()是不正確的。 – Okas 2014-09-25 15:16:10

回答

1

我在處理嵌套片段時遇到過這個問題。在我的情況正在發生,因爲我使用了錯誤的片段經理即我不小心用兒童片段的交易活動片段經理

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

索引指向片段,其中發生了此錯誤,即7