Guarde los datos y cambie la orientación

Tengo dos actividades y uso android:configChanges="keyboardHidden|orientation|screenSize"

  @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); setContentView(R.layout.activity_main); if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { } } 

Un uso activo para orientación vertical a horizontal del segundo, pero cuando la orientación cambia, la actividad se carga y los datos se pierden

¿Cómo puedo guardar los datos y cambiar la orientación de la actividad?

Si tiene menos datos, puede guardarlos y utilizarlos en onSavedInstanceState y onRestoreInstanceState . Para más información, visite este enlace Guardar datos

Pero en caso de que tenga datos grandes, entonces debo decir que no debe permitir los cambios de orientación, puede restringirlos agregando la línea siguiente en el archivo de manifiesto:

 android:configChanges="orientation|keyboardHidden" // fixes orientation 

Recomiendo esta publicación

http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

a cualquiera que todavía esté buscando una solución a este problema. El autor describe cómo usar un Fragmento para retener datos.

Asegúrate de tener la llamada

 setRetainInstance(true); 

en el método onCreate() de tu Fragmento!

Consulte onSaveInstanceState(Bundle) y onRestoreInstanceState(Bundle)

debes consultar la aplicación de muestra “Multiresolution” aquí a continuación, puedes ver el fragmento de código de “Multiresolution”

 public final class MultiRes extends Activity { private int mCurrentPhotoIndex = 0; private int[] mPhotoIds = new int[] { R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); showPhoto(mCurrentPhotoIndex); // Handle clicks on the 'Next' button. Button nextButton = (Button) findViewById(R.id.next_button); nextButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { mCurrentPhotoIndex = (mCurrentPhotoIndex + 1) % mPhotoIds.length; showPhoto(mCurrentPhotoIndex); } }); } @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt("photo_index", mCurrentPhotoIndex); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { mCurrentPhotoIndex = savedInstanceState.getInt("photo_index"); showPhoto(mCurrentPhotoIndex); super.onRestoreInstanceState(savedInstanceState); } private void showPhoto(int photoIndex) { ImageView imageView = (ImageView) findViewById(R.id.image_view); imageView.setImageResource(mPhotoIds[photoIndex]); TextView statusText = (TextView) findViewById(R.id.status_text); statusText.setText(String.format("%d/%d", photoIndex + 1, mPhotoIds.length)); } } 

Puede guardar cualquier Objeto anulando Objeto público onRetainNonConfigurationInstance () y llamando a getLastNonConfigurationInstance() en su método onCreate.

 @Override public Object onRetainNonConfigurationInstance() { return data; } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); data = getLastNonConfigurationInstance(); } 

pero si haces esto, debes cambiar tu manifiesto y tu código, por lo que se usa el proceso normal para un cambio de configuración.

A diferencia del método SavedInstance, esto solo guarda el objeto si la actividad se cancela debido a un cambio de configuración.

El método es onSaveInstanceState() y el sistema lo llama cuando el usuario abandona su actividad. Cuando el sistema llama a este método, pasa el objeto Bundle que se guardará en caso de que su actividad se destruya inesperadamente para que pueda agregar información adicional. Luego, si el sistema debe recrear la instancia de actividad después de que se destruyó, pasa el mismo objeto Bundle al método onRestoreInstanceState() su actividad y también a su método onCreate() .

consulte http://developer.android.com/training/basics/activity-lifecycle/recreating.html