Domanda

Sono l'utilizzo degli intenti di passare tra le attività nella mia app Android. Sto mettendo i dati nel intenti per l'uso nella prossima attività. Quando accendo il telefono tra modalità orizzontale e verticale, i valori passati dall'intento sono persi e ho un NullPointerException.

Qualcuno può dirmi che cosa potrebbe essere sbagliato.

C'è un sacco di codice per inserire completamente. Ma se qualcuno ha bisogno di guardare specifiche parti del codice, posso postare qui.

Modifica
Ho risolto il problema dello stato di non essere salvato. Ma un altro problema che ho riscontrato è che nessuno dei pulsanti del schermo dopo l'orientamento è stato modificato. Su premere il tasto, ottengo questo avvertimento nel LogCat

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

Si prega di aiutare.

È stato utile?

Soluzione

Quando si passa l'orientamento l'attività viene ricreata e onCreate viene richiamato in modo da avere per usare il bundle per salvare la situazione attuale e il ripristino dopo un cambio di orientamento. È possibile vedere in azione se avete solo un app con un TextView e l'immissione di testo e modificare l'orientamento. Se si bundle tuo stato per onCreate si può frenare questa. Questo è probabilmente anche per questo si dispone di un NullPointer dopo le modifiche di orientamento. E 'fastidioso come l'inferno, ma qualcosa che dobbiamo convivere.

Questo link su una serie di esercitazioni di orientamento e di questo primo in particolare dovrebbe aiutare a capire esattamente che cosa sta succedendo e come mantenere con successo il vostro stato attuale.

Aggiornamento: C'è anche un post su riavvio Attività SO sulla rotazione Android che occupa quasi la stessa cosa.

Modifica per il follow-up domanda:

Hai ricollegare i gestori di clic dopo il cambio di orientamento?

Altri suggerimenti

Scrivi questo nella vostra file..in manifesta quale attività si desidera che questo -

 android:configChanges="orientation|keyboardHidden"

Modificato: Utilizza questo uno per le versioni nuove API -

android:configChanges="orientation|keyboardHidden|screenSize"

Sicuramente funzionerà ..

Prova questo:

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

E 'possibile dichiarare un androide attributo: configChanges con il valore di "orientamento", questo impedirà l'attività di essere riavviato. Al contrario, l'attività rimane in esecuzione e il suo metodo () onConfigurationChanged viene chiamato.

Dichiarare < android:configChanges="orientation|keyboardHidden"/> nel vostro manifesto. Questo permette di gestire il cambio di visibilità Orientamento / Keyboard da te. Naturalmente, non è necessario eseguire l'override del metodo di callback per gestirlo.

Ciao ho anche incontrato questo problema. quello fisso che per me è stato:

@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);
}

e poi in 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");
}

allora si può essere sicuri che gli oggetti non sono nulli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top