Comment redémarrer un Android Activity
? J'ai essayé ce qui suit, mais Activity
s'arrête tout simplement.
public static void restartActivity(Activity act){
Intent intent=new Intent();
intent.setClass(act, act.getClass());
act.startActivity(intent);
act.finish();
}
android
android-activity
Samet ÖZTOPRAK
la source
la source
Réponses:
J'ai fait mon sélecteur de thème comme ceci:
Fondamentalement, j'appelle en
finish()
premier et j'utilise exactement la même intention avec laquelle cette activité a été lancée. Cela semble faire l'affaire?MISE À JOUR: Comme indiqué par Ralf ci-dessous,
Activity.recreate()
est la voie à suivre dans l'API 11 et au-delà. C'est préférable si vous êtes dans un environnement API11 +. Vous pouvez toujours vérifier la version actuelle et appeler l'extrait de code ci-dessus si vous êtes dans l'API 10 ou inférieure. (N'oubliez pas de voter pour la réponse de Ralf!)la source
Depuis l'API niveau 11 (Honeycomb), vous pouvez appeler la méthode recreate () de l'activité (grâce à cette réponse).
La méthode recréer () agit comme un changement de configuration, donc vos méthodes onSaveInstanceState () et onRestoreInstanceState () sont également appelées, le cas échéant.
la source
Avant SDK 11, une façon de procéder est la suivante:
la source
overridePendingTransition(0, 0);
aprèsfinish()
etstartActivity()
, respectivement, pas où vous l'avez appelé ...Juste pour combiner les réponses de Ralf et Ben (y compris les modifications apportées dans les commentaires):
la source
J'ai utilisé ce code afin que je puisse toujours prendre en charge les anciennes versions d'Android et l'utiliser
recreate()
sur les nouvelles versions d'Android.Code:
Échantillon:
la source
Cette solution a fonctionné pour moi.
Terminez d'abord l'activité puis recommencez.
Exemple de code:
la source
C'est de loin le moyen le plus simple de redémarrer l'activité en cours:
la source
Appelez cette méthode
Merci,
la source
Même si cela a été répondu plusieurs fois.
Si vous redémarriez une activité à partir d'un fragment, je le ferais comme ceci:
Vous pensez peut-être que c'est un peu exagéré? Mais la
Handler
publication vous permet d'appeler cela dans une méthode de cycle de vie. Je l'ai utilisé dansonRestart
/onResume
méthode pour vérifier si l'état a changé entre le retour de l'utilisateur à l'application. (installé quelque chose).Sans le
Handler
si vous l'appelez dans un endroit étrange, cela tuera simplement l'activité et ne la redémarrera pas.N'hésitez pas à poser des questions.
À la vôtre, Chris
la source
Eh bien, ce n'est pas répertorié, mais un combo de certains qui est déjà publié:
la source
En conjonction avec un comportement étrange du cycle de vie de SurfaceView avec la caméra . J'ai trouvé que recréer () ne se comportait pas bien avec le cycle de vie de SurfaceViews. surfaceDestroyed n'est jamais appelé pendant le cycle de loisirs. Il est appelé après onResume (étrange), auquel cas ma SurfaceView est détruite.
La façon originale de recréer une activité fonctionne bien.
Je ne peux pas comprendre exactement pourquoi c'est, mais c'est juste une observation qui peut, espérons-le, guider les autres à l'avenir, car elle a résolu mes problèmes avec SurfaceViews.
la source
Je me demande pourquoi personne n'a mentionné
Intent.makeRestartActivityTask()
qui fait proprement ce but exact.Cette méthode est définie
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
comme indicateurs par défaut.la source
En fait, le code suivant est valide pour les niveaux 5 et supérieurs de l'API, donc si votre API cible est inférieure à cela, vous vous retrouverez avec quelque chose de très similaire au code d'EboMike.
la source
Il existe un moyen hacky qui devrait fonctionner sur n'importe quelle activité, y compris la principale.
Lorsque l'orientation change, Android recrée généralement votre activité (sauf si vous la remplacez). Cette méthode est utile pour les rotations à 180 degrés, lorsque Android ne recrée pas votre activité.
la source
essayez d'utiliser cela ..
la source
La solution à votre question est:
Vous devez effectuer un cast dans le contexte de l'activité pour démarrer une nouvelle activité et pour terminer l'activité en cours.
J'espère que cela utile .. et fonctionne pour moi.
la source
Si vous supprimez la dernière ligne, vous créerez une nouvelle
act
activité, mais votre ancienne instance sera toujours en vie.Avez-vous besoin de redémarrer l'activité comme lorsque l'orientation est modifiée (c'est-à-dire que votre état est enregistré et transmis à
onCreate(Bundle)
)?Si vous ne le faites pas, une solution de contournement possible consisterait à utiliser une activité factice supplémentaire, qui serait démarrée à partir de la première activité, et quel travail doit en démarrer une nouvelle instance. Ou tout simplement retarder l'appel à
act.finish()
, une fois le nouveau lancé.Si vous devez sauvegarder la majeure partie de l'état, vous vous retrouvez dans des eaux assez profondes, car il n'est pas trivial de transmettre toutes les propriétés de votre état, en particulier sans divulguer votre ancien contexte / activité, en le passant à la nouvelle instance.
Veuillez préciser ce que vous essayez de faire.
la source
C'est ainsi que je le fais.
la source
Si vous appelez à partir d'un fragment, faites le code ci-dessous.
la source
vous pouvez simplement utiliser
méthode comme suit
et appelez onRestart () où vous souhaitez redémarrer l'activité en cours
la source
Appelez la méthode onCreate. Par exemple
onCreate(null);
la source