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)