rotación - Android: el cambio entre modo horizontal y vertical hace que Intent pierda valores.
manejando la rotación de pantalla en android studio (6)
Cuando cambia la orientación, la actividad se recrea y se recupera onCreate, por lo que tiene que usar el paquete para guardar su estado actual y restaurar después de un cambio de orientación. Puedes ver esto en acción si solo tienes una aplicación con TextView e ingresas texto y cambias de orientación. Si agrupa su estado para onCreate puede frenar esto. Probablemente esta sea también la razón por la que tiene un NullPointer después de los cambios de orientación. Es molesto como el infierno, pero algo con lo que tenemos que vivir.
This enlace en una serie de tutoriales de orientación y este primero en particular debería ayudarlo a comprender exactamente qué está sucediendo y cómo mantener con éxito su estado actual.
Actualización: También hay una publicación en SO Activity restart en la rotación de Android que trata casi lo mismo.
Editar para la pregunta de seguimiento:
¿Volvió a adjuntar los controladores de clic después del cambio de orientación?
Estoy usando Intents para cambiar entre actividades en mi aplicación de Android. Estoy poniendo datos en la Intención para usar en la siguiente actividad. Cuando cambio el teléfono entre los modos horizontal y vertical, los valores pasados desde la intención se pierden y recibo una NullPointerException.
¿Puede alguien decirme qué podría estar mal?
Hay un montón de código para publicarlo por completo. Pero si alguien necesita ver partes específicas del código, puedo publicarlo aquí.
Editar
Resolví el problema del estado no siendo salvado. Pero otro problema que enfrenté es que ninguno de los botones en la pantalla funciona después de que se haya cambiado la orientación. Al presionar el botón, recibo esta advertencia en LogCat
02-25 23:07:49.190: WARN/WindowManager(58): No window to dispatch pointer action 0
Por favor ayuda.
Es posible declarar un atributo android: configChanges con el valor de "orientación", esto evitará que la actividad se reinicie. En cambio, la actividad permanece en ejecución y se llama a su método onConfigurationChanged ().
Escribe esto en tu archivo de manifiesto ... en qué actividad quieres esto--
android:configChanges="orientation|keyboardHidden"
Editado: use este para las nuevas versiones de API--
android:configChanges="orientation|keyboardHidden|screenSize"
Definitivamente funcionará ..
Hola también me encontré con este problema. Lo que me lo arregló fue:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user''s current game state
savedInstanceState.putString("Username", mUsername);
savedInstanceState.putString("Password", mPassword);
savedInstanceState.putString("UserID", mUserID);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
y luego en onCreate ():
if (savedInstanceState == null) {
Bundle extras = getIntent().getExtras();
if(extras == null) {
mUsername = "?";
mPassword = "?";
mUserID = "?";
} else {
mUsername = extras.getString("Username");
mPassword = extras.getString("Password");
mUserID = extras.getString("UserID");
}
} else {
mUsername = (String) savedInstanceState.getSerializable("Username");
mPassword = (String) savedInstanceState.getSerializable("Password");
mUserID = (String) savedInstanceState.getSerializable("UserID");
}
entonces puedes estar seguro de que los objetos no son nulos.
Prueba esto:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(SOME_KEY, "blah blah blah");
}
@Override
public void onCreate(Bundle savedInstanceState) {
...
somevalue = savedInstanceState.getString(SOME_KEY);
...
}
< android:configChanges="orientation|keyboardHidden"/>
en tu manifiesto. Esto le permite gestionar el cambio de orientación / visibilidad del teclado por sí mismo. Por supuesto, no es necesario anular el método de devolución de llamada para administrarlo.