1

我正在使用包含2個片段的viewPager。 第一個片段包含嵌套片段,第二個片段是空片段。 在第一個片段中,我使用子片段管理器嵌套4個片段。 我的應用在運行時崩潰了IndexOutOfBoundsException在viewpager片段中嵌套片段拋出IndexOutOfBoundsException

這裏是我的第一個片段的onCreateView方法

@Override 
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
{ 
    FragmentManager fragmentManager = getChildFragmentManager(); 
      fragmentManager.beginTransaction() 
        .add(R.id.frag1_container, frag1) 
        .commit(); 

      fragmentManager.beginTransaction() 
        .add(R.id.frag2_container, frag2) 
        .commit(); 

      fragmentManager.beginTransaction() 
        .add(R.id.frag3_container, frag3) 
        .commit(); 

      fragmentManager.beginTransaction() 
        .add(R.id.frag4_container, frag4) 
        .commit(); 
     return super.onCreateView(inflater, container, savedInstanceState); 
    } 

代碼下面是異常的堆棧跟蹤:

D/AndroidRuntime: Shutting down VM 
E/AndroidRuntime: FATAL EXCEPTION: main 
E/AndroidRuntime: java.lang.IndexOutOfBoundsException: Invalid index 3, size is 2 
E/AndroidRuntime:  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
E/AndroidRuntime:  at java.util.ArrayList.set(ArrayList.java:481) 
E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.makeInactive(FragmentManager.java:1192) 
E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1099) 
E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1235) 
E/AndroidRuntime:  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:710) 
E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501) 
E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:458) 
E/AndroidRuntime:  at android.os.Handler.handleCallback(Handler.java:739) 
E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:95) 
E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:135) 
E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5292) 
E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:372) 
E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 
E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 
+0

什麼是你ViewPager對'getCount將()'適配器的回報? –

+0

它返回2(這是正確的)。發現原因,張貼在下面。導致錯誤的代碼部分沒有在問題中提到,因爲堆棧跟蹤沒有清楚地顯示它來自哪裏(我無法弄清楚它會是相關的)。 –

回答

2

想通了什麼導致錯誤。 裏面我的一個片段,我打電話

getActivity().getSupportFragmentManager().beginTransaction().remove(instance).commit(); 

使用活動,而不是碎片的孩子片段經理的片段管理器,它是。

,因此這樣的錯誤:

java.lang.IndexOutOfBoundsException: Invalid index 3, size is 2 

其中3是嵌套片段的指數和2是由活動的片段管理器返回的大小。

通過改變該行固定它:

ThisFragment.this.getFragmentManager().beginTransaction().remove(instance).commit();