2012-03-07 17 views
5

Tengo algunas páginas (fragmentos) en un viewPager.
Cuando traté de eliminar (por ejemplo) el primero, así:No se puede cambiar la etiqueta del fragmento

mFragmentManager.beginTransaction().remove(Page1).commit(); 

Se dice que

IllegalStateException has occured. 

no sé qué. ¿Alguien podría ayudarme? Gracias.

Excepción:

java.lang.IllegalStateException: Can't change tag of fragment Page2{40586418 #2 id=0x7f080006 android:switcher:2131230726:2}: was android:switcher:2131230726:2 now android:switcher:2131230726:1 
+0

posible duplicado de [Android: no se puede reemplazar un fragmento con otro] (http://stackoverflow.com/questions/5907673/android-cant-cant-replace-one-fragment-with-another) – bernie

+0

El rastreo de excepción ayudaría . Lo mismo me está sucediendo a mí, no a eliminar, sin embargo, en ViewPager.setCurrentItem (int). –

+0

¿Qué quiere decir con eliminar fragmento de ViewPager. ViewPager maneja la vida de Fragment.Tienes que eliminar cosas como lo eliminarías en una vista de lista, usando métodos de adaptador. ¿Puedes por favor aclarar? –

Respuesta

2

Ésta es una vieja pregunta, pero de todos modos aquí está una cierta información con la esperanza de que ayudará a alguien.

ViewPager funciona junto con su adaptador que se establece a través de ViewPager # setAdapter(). En el caso de esta pregunta, parece que FragmentPagerAdapter se usa como un adaptador (dado que este adaptador nombra los fragmentos android: switcher: [x]: [y] como aparece en la excepción).

Una observación importante acerca de la FragmentPagerAdapter es la siguiente:

FragmentPagerAdapter posee los fragmentos asignados que se utilizan en la ViewPager.

El usuario de ViewPager con conjunción de ViewPagerAdapter tiene que definir una subclase de FragmentPagerAdapter implementar el método getItem(), el siguiente prototipo:

public abstract Fragment getItem(int position); 

Esta función crea los diferentes fragmentos utilizados por el ViewPager como páginas . La implementación de este método debe considerarse como un servicio proporcionado por la subclase a FragmentPagerAdapter() para asignar los fragmentos.

En otras palabras, aunque la subclase asigna los fragmentos, no es el propietario de los mismos.

Dado que, como se dijo anteriormente, el propietario de los fragmentos es FragmentPagerAdapter, todas las operaciones de fragmentación (en el sentido de FragmentManager/FragmentTransaction) solo deben ser realizadas por FragmentPagerAdapter.

Intentar realizar operaciones en estos fragmentos puede interferir con el funcionamiento normal de ViewPager y provocar un comportamiento indefinido.

En el caso de esta pregunta, hay un intento de eliminar uno de los fragmentos utilizados por el ViewPager fuera de FragmentPagerAdapter que, como se explicó, es incorrecto y probablemente desencadenó una secuencia que finalizó con esta excepción.

Cuando se necesita eliminar/agregar/reemplazar dinámicamente páginas en un ViewPager, la forma de hacerlo es llamar a notifyDataSetChanged() en el adaptador.

¡Buena suerte!

Cuestiones relacionadas