with - implement fragment in android
Los fragmentos de anidación dentro de un fragmento de viewpager generan IndexOutOfBoundsException (1)
Descubierto lo que estaba causando el error. Dentro de uno de mis fragmentos, estaba llamando
getActivity().getSupportFragmentManager().beginTransaction().remove(instance).commit();
que estaba usando el administrador de fragmentos de la actividad en lugar del administrador de fragmento hijo de los fragmentos ''.
y de ahí este error:
java.lang.IndexOutOfBoundsException: Invalid index 3, size is 2
donde 3 era el índice del fragmento anidado y 2 era el tamaño devuelto por el administrador de fragmentos de la actividad.
Se corrigió cambiando esa línea a:
ThisFragment.this.getFragmentManager().beginTransaction().remove(instance).commit();
Estoy usando viewPager que contiene 2 fragmentos. El primer fragmento contiene fragmentos anidados y el segundo es un fragmento vacío. Dentro del primer fragmento estoy anidando 4 fragmentos usando el administrador de fragmento hijo. Mi aplicación se bloquea con una excepción IndexOutOfBoundsException en tiempo de ejecución.
Aquí está mi código para el método onCreateView del primer fragmento
@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);
}
Aquí está el seguimiento de pila para la excepción:
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)