Question

Je suis l'utiliser avec pour basculer entre les activités dans mon application Android. Je mettais des données dans l'intention d'utiliser dans la prochaine activité. Lorsque je passe le téléphone entre les modes portrait et paysage, les valeurs transmises de l'intention sont perdues et je reçois un NullPointerException.

Quelqu'un peut-il s'il vous plaît me dire ce qui pourrait être mal.

Il y a beaucoup de code pour afficher entièrement. Mais si quelqu'un a besoin de regarder des parties spécifiques du code, je peux poster ici.

Modifier Je résolu la question de l'Etat ne sont pas sauvés. Mais un autre problème que je pose est qu'aucun des boutons sur le travail de l'écran après l'orientation a été modifiée. Le bouton presse, je reçois cet avertissement LogCat

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

S'il vous plaît aider.

Était-ce utile?

La solution

Lorsque vous changez l'orientation de l'activité est recréée et onCreate est rappelé que vous devez utiliser le paquet pour sauver votre état actuel et de restauration après un changement d'orientation. Vous pouvez le voir en action si vous avez juste une application avec un TextView et vous entrez du texte et de modifier l'orientation. Si vous regroupez votre état pour onCreate vous pouvez limiter cela. Ceci est probablement aussi la raison pour laquelle vous avez un NullPointer après les changements d'orientation. Il est ennuyeux comme l'enfer, mais quelque chose que nous devons vivre avec.

Ce lien sur une série de travaux dirigés d'orientation et cette première en particulier devrait vous aider à comprendre exactement ce qui se passe et comment maintenir avec succès votre état actuel.

Mise à jour: Il y a aussi un poste au redémarrage de l'activité SO rotation sur Android traite presque la même chose.

Modifier pour le suivi question:

Avez-vous re-joindre vos gestionnaires de clic après le changement d'orientation?

Autres conseils

Ecrire dans votre file..in manifeste que l'activité que vous voulez que cette -

 android:configChanges="orientation|keyboardHidden"

Modifié: Utilisez celui-ci pour les nouvelles versions API -

android:configChanges="orientation|keyboardHidden|screenSize"

Certainement, il fonctionnera ..

Essayez ceci:

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

Il possible de déclarer un androïde d'attribut: configChanges avec la valeur de « orientation », cela empêchera l'activité d'être redémarré. Au lieu de cela, l'activité reste en cours d'exécution et sa méthode onConfigurationChanged () est appelée.

Déclarer < android:configChanges="orientation|keyboardHidden"/> dans votre manifeste. Cela vous permet de gérer le changement de visibilité Orientation / clavier par vous-même. Bien sûr, vous n'avez pas besoin de passer outre la méthode de rappel pour le gérer.

Salut j'ai également rencontré ce problème. ce qu'il fixe pour moi était:

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

et ensuite dans 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");
}

alors vous pouvez être sûr que les objets ne sont pas nulles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top