Android - conmutación entre el paisaje y el modo de retrato que hace de la Intención de perder los valores

StackOverflow https://stackoverflow.com/questions/584779

Pregunta

Yo estoy usando el color para cambiar entre las actividades en mi Android.Me estoy poniendo los datos en la Intención de uso en la siguiente actividad.Cuando me cambie el teléfono entre los modos horizontal y vertical, los valores pasados de la intención se pierde y me da un NullPointerException.

Por favor alguien puede decirme lo que podría estar equivocado.

Hay una gran cantidad de código para publicarlo completo.Pero si alguien las necesidades específicas de las partes de código, puedo publicar aquí.

Editar
He resuelto el problema de estado, no de ser salvos.Pero otro problema que enfrentan es que ninguno de los botones en la pantalla de trabajo después de la orientación ha cambiado.Al presionar el botón, me sale esta advertencia en el LogCat

02-25 23:07:49.190: WARN/WindowManager(58): No window to dispatch pointer action 0

Por favor, ayudar.

¿Fue útil?

Solución

Cuando se cambia la orientación de la actividad es recreado y onCreate se recordó así que hay que utilizar el paquete para guardar su estado actual y restaurar después de un cambio de orientación.Usted puede ver esto en acción si usted tiene una aplicación con un TextView y entrar en el texto y cambiar la orientación.Si usted paquete de su estado para onCreate se puede frenar esto.Esta es probablemente la razón por la que tienen un NullPointer después de los cambios de orientación.Es molesto como el infierno, pero de algo tenemos que vivir con.

Este el vínculo de una serie de tutoriales y de orientación este primero en particular le ayudará a entender exactamente lo que está pasando y cómo mantener con éxito su estado actual.

Actualización:También hay un post en TAN La actividad de reiniciar en la rotación de Android que se ocupa de casi la misma cosa.

De edición para la pregunta de seguimiento:

¿Volver a conectar el haga clic en controladores tras el cambio de orientación?

Otros consejos

Escribe esto en el archivo de manifiesto..en la que la actividad que usted desea que esta -

 android:configChanges="orientation|keyboardHidden"

Editado: El uso de este para la nueva Api de versiones--

android:configChanges="orientation|keyboardHidden|screenSize"

Definitivamente va a trabajar..

Intente 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);
   ...
}

Es posible declarar un atributo android:configChanges con el valor de "orientación", esto evitará que la actividad se está reiniciando.En cambio, la actividad sigue en funcionamiento y el onConfigurationChanged() llama al método.

Declarar < android:configChanges="orientation|keyboardHidden"/> en su manifiesto.Esto le permite gestionar el cambio de Orientación/Teclado visibilidad por ti mismo.Por supuesto, Usted no necesita reemplazar el método de devolución de llamada para gestionar.

Hola, yo también se han encontrado con este problema.lo que fija para mí 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, a continuación, 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 usted puede estar seguro de que los objetos no son nulos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top