working with studio multiple implement how fragments example ejemplo create crear android android-fragments android-viewpager android-nested-fragment

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)