Fragmento en la rotación de la pantalla
He añadido un viewpager a una actividad que contiene dos páginas.
En onCreate de actividad agrego fragmentos a un fragmentoAdapter:
- IOS Facebook Slide Menu para Android
- Problemas de memoria en fragmentos que muestran imágenes
- Cómo mostrar / ocultar fragmento con el dedo hacia arriba / hacia abajo como la aplicación androide de soundcloud
- NullPointerException en Fragment Listener
- ListFragment vs ListActivity - ¿Cuál usar?
public void onCreate(Bundle savedInstanceState) { ...... FragmentAdapter fragmentAdapter = new FragmentAdapter ( getSupportFragmentManager(), new Fragment[]{FragmentGame.builder(id), FragmentComments.builder(id)}, new String[]{getString(R.string.gameInfo), getString(R.string.comments)} ); ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager); viewPager.setAdapter(fragmentAdapter); public static FragmentGame builder(long id) { FragmentGame fragmentGame = new FragmentGame(); // fragmentGame.id = id; Bundle bundle = new Bundle(); bundle.putLong(Constants.EXTRA_ID, id); fragmentGame.setArguments(bundle); return fragmentGame; }
La primera vez que se crea la actividad onCreateView de fragmento se llama como se espera.
El comportamiento extraño es cuando se gira la pantalla por primera vez el onCreateView de fragmento se llama dos veces, pero la segunda llamada sólo tiene la id correcta y para la primera llamada id es 0.
En la segunda rotación de la pantalla, onCreateView se llama tres veces y nuevamente sólo el último tiene id.
Con más rotación de la pantalla, aumentan las llamadas onCreateView .
He encontrado alguna pregunta relacionada sobre el fragmento y la rotación de la pantalla, pero no puedo entender por qué sucede esto y cómo hacerlo de la manera correcta.
—– ACTUALIZACIÓN ——
El problema de identificación se resuelve cuando he reemplazado el paquete con el ajuste de valor directo.
- Recycler View Adapter con EditText
- Los datos del fragmento se van nulos cuando otro fragmento se carga
- Ocultar pestañas en el visor
- ¿Es posible deshabilitar el acceso al diseño del fragmento (vistas) de la actividad de los padres?
- PutFragment () - Fragment x no está actualmente en el FragmentManager
- Android ViewPager Cargando fragmentos incorrectos
- Programaticamente volver al fragmento anterior en el backstack
- AppCompat y Fragmento no funcionan
Cada vez que gira el dispositivo, está creando un nuevo fragmento y agregándolo al FragmentManager.
Todos los fragmentos creados anteriormente están todavía en el FragmentManager, por lo tanto, el recuento aumenta en uno cada vez.
Si desea conservar un valor en su fragmento, debe almacenarlo en los argumentos, de lo contrario cualquier valor que contenga se perdería cuando el sistema recree el fragmento.
public static FragmentGame builder(long id) { Bundle args = new Bundle(); args.putInt("id", id); fragmentGame f = new fragmentGame(); f.setArguments(args); }
En lugar de crear un nuevo fragmento, sospecho que realmente desea recuperar su creado anteriormente al girar el dispositivo. Utilice getSupportFragmentManager().findFragmentById()
o getSupportFragmentManager().findFragmentByTag()
para hacer esto.
Editar: Código extra
// Add fragment to the manager FragmentTransaction trans=getSupportFragmentManager().beginTransaction(); trans.add(f,"myTag"); trans.commit(); // retrieve the fragment Fragment f= getSupportFragmentManager().findFragmentByTag("myTag");
Sólo intenta recuperar el fragmento, si el valor es nulo, crear un nuevo fragmento y añadirlo al gestor de lo contrario utilizar el recuperado.
Si no desea volver a cargar el fragmento en el cambio de orientación, escriba a continuación para la actividad en la que está cargando el fragmento en el archivo de manifiesto.
<activity android:name="your activity name" android:configChanges="orientation|screenSize" // add this to your activity android:label="@string/app_name"> </activity>
- Los datos móviles no funcionan. Android Lollipop en Nexus 5
- Comparación de números de teléfono en Android