Question

J'ai 3 différentes activités que l'utilisateur navigue entre dans aucun ordre particulier. Mon objectif, il double:

  1. Lorsque l'utilisateur passe à autre chose quand l'application est repris, je veux commencer où l'utilisateur a quitté, même si l'application a pris fin
  2. La dernière fois que l'activité est reprise, je veux restaurer le dernier état considéré (celui-ci je pense avoir une assez bonne idée sur la façon de achive)

Je pense que le problème n'est pas start / stop - où je reçois à peu près ce que je dois, mais onCreate() si l'application a été arrêté. Dans ce cas - il prend l'activité que je configuré dans le manifeste. Je suppose que je peux mettre quelque chose dans la méthode de onCreate() de cette activité par défaut, mais est-il une meilleure façon que je manque peut-être?

Était-ce utile?

La solution

Si votre application n'a pas été « terminée », alors n ° 1 devrait déjà fonctionner et # 2 nécessite simplement enregistrer les valeurs qui ne sont pas gérées automagiquement dans le Bundle onSaveInstanceState () puis de les restaurer dans onRestoreInstanceState () .

est une sorte de hack, mais je pense que votre meilleure option pour # 1 dans le cas de l'application effectivement fin serait de sauver l'activité la plus récente dans le onResume de chacune de vos classes d'activité puis lors de la première course la onCreate de votre première activité faire un contrôle, puis lancez une nouvelle activité correcte ... peut-être même mis dans une activité vide au début. Quelque chose comme ceci:

StartActivity:

public class StartActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // get last open Activity
        String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
        if (last_activity == MyActivity2.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity2.class));
        } else if (last_activity == MyActivity3.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity3.class));
        } else {
            // assume default activity
            startActivityForResult(new Intent(this, MyActivity1.class));
        }
    }

    public void onActivityResult() {
        // kill the activity if they go "back" to here
        finish();
    }
}

Ensuite, dans toutes les autres activités (MyActivity1,2,3) enregistrer les valeurs comme ceci:

@Override
public void onResume() {
    Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
    e.putString("last_activity", getClass().getSimpleName());
    e.commit();

    super.onResume();
}

Vous devrez également gérer l'enregistrement / restauration des données pour chaque activité manuellement. Vous pouvez enregistrer toutes les valeurs dont vous avez besoin dans les préférences à l'intérieur du OnPause () de chacune des activités, puis la restaurer dans le onResume ().

Autres conseils

Gardez à l'esprit que onSaveInstanceState () n'est pas viable pour l'état à long terme, à savoir les pouvoirs de l'utilisateur du téléphone vers le bas et se transforme alors en arrière sur à un moment indéterminé plus tard. Vous devrez créer votre propre mécanisme d'Etat à long terme si vous le souhaitez pour votre état pour survivre les cycles de puissance.

Je crois que vous voulez mettre en œuvre onSaveInstanceState et qui stockera vos activités état dans un paquet. Ce paquet sera passé dans votre activité dans onCreate, et vous pouvez l'utiliser pour réinitialiser vos valeurs.

http://developer.android.com/guide/topics/fundamentals .html # actstate

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