studio sola samsung rotemos rotaciĆ³n rotacion reinicie que porque pantalla movil mantener manejando los girar gira evitar datos cuando configchanges como celular bloquear activity android android-activity rotation

android - sola - Perder datos cuando gira la pantalla



mantener los datos cuando rotemos la pantalla en android (7)

Tengo un pequeño error gracioso en mi aplicación. Cuando el usuario gira la pantalla, pierdo algunos de los datos en mi actividad. ¿Alguien que tenga una idea de por qué sucede esto?


Sigue estos dos pasos

1) Guarde los datos en onSaveInstance:

protected void onSaveInstanceState (Bundle outState) { super.onSaveInstanceState(outState); outState.putCharSequence(EDIT_TEXT_VALUE, mTextView.getText()); //<-- Saving operation }

2) Recuperar datos en onCreate:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mTextView = (TextView) findViewById(R.id.editText); // Retrieving logic if (savedInstanceState != null) { CharSequence savedText = savedInstanceState.getCharSequence(EDIT_TEXT_VALUE); mTextView.setText(savedText); } }

Un punto a tener en cuenta aquí es cuando la actividad se llama por primera vez, luego el paquete en el parámetro del método onCreate () es nulo, pero cuando se recrea la actividad, el paquete no es nulo.

¿Por qué se pierden datos cuando la pantalla gira?

El sistema operativo Android intenta elegir los recursos más adecuados cuando se dibuja una actividad.
Pocos ejemplos de recursos múltiples.
Recurso de imagen: debe tener avisos de varias carpetas para los mismos archivos de imagen hdpi, mdpi, xxhdpi, etc.
Recurso de diseño: si ha creado un diseño para el modo horizontal en la carpeta layout-land.
OS es responsable de elegir el recurso más apropiado entre todos los recursos disponibles posibles, por lo que no tiene que preocuparse por ello.


Aquí hay una variación de la respuesta útil de @ jaisonDavis:

int myInt; String myString; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_verses); if (savedInstanceState == null) { Intent intent = getIntent(); myInt = intent.getIntExtra("MyIntIntentKey", DEFAULT_INT); myString = intent.getStringExtra("MyStringIntentKey", DEFAULT_STRING); } else { // savedInstanceState has saved values myInt = savedInstanceState.getInt("MyIntKey"); myString = savedInstanceState.getString("MyStringKey"); } } @Override public void onSaveInstanceState(Bundle savedInstanceState) { savedInstanceState.putInt("MyIntKey", myInt); savedInstanceState.putString("MyStringKey", myString); super.onSaveInstanceState(savedInstanceState); }

En este ejemplo, las variables se inicializan desde un Intent la primera vez que se crea la actividad, pero luego se inicializan desde savedInstanceState (como cuando cambia la orientación).


De forma predeterminada, cuando se gira la pantalla, su actividad se cancela y se reinicia. Para asegurarse de que no se pierden datos, debe guardar y restaurar adecuadamente sus datos utilizando los métodos del ciclo de vida. Consulte Cómo guardar el estado persistente .


En AndroidManifest.xml agrega el siguiente código

<activity android:name=".MainActivity" android:configChanges="keyboardHidden|orientation|screenSize" >



//Use onSaveInstanceState(Bundle) and onRestoreInstanceState @Override public void onSaveInstanceState(Bundle savedInstanceState) { // Save UI state changes to the savedInstanceState. // This bundle will be passed to onCreate if the process is // killed and restarted. savedInstanceState.putBoolean("MyBoolean", true); savedInstanceState.putDouble("myDouble", 1.9); savedInstanceState.putInt("MyInt", 1); savedInstanceState.putString("MyString", "Welcome back to Android"); // etc. super.onSaveInstanceState(savedInstanceState); } //onRestoreInstanceState @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); // Restore UI state from the savedInstanceState. // This bundle has also been passed to onCreate. boolean myBoolean = savedInstanceState.getBoolean("MyBoolean"); double myDouble = savedInstanceState.getDouble("myDouble"); int myInt = savedInstanceState.getInt("MyInt"); String myString = savedInstanceState.getString("MyString"); }

Así es como guarda sus datos cuando el sistema los elimina al girarlos.


setRetainInstance(true);

Use esto en OnCreate