web-dev-qa-db-fra.com

Recharger l'activité dans Android

Est-ce une bonne pratique de recharger une Activity dans Android ?

Quelle serait la meilleure façon de le faire? this.finish et ensuite this.startActivity avec l'activité Intent?

181
hpique

Vous pouvez simplement utiliser 

finish();
startActivity(getIntent());

pour rafraîchir une Activity à partir de lui-même.

440
Sush

C'est ce que je fais pour recharger l'activité après le changement de retour d'un changement de préférence.

@Override
protected void onResume() {

   super.onResume();
   this.onCreate(null);
}

Cela provoque essentiellement l'activité de se redessiner.

Mise à jour: Une meilleure méthode consiste à appeler la méthode recreate(). Cela entraînera la recréation de l'activité.

32
kingargyle

pour ceux qui ne veulent pas voir que clignote après recréer () méthode, utilisez simplement

 finish();
 overridePendingTransition(0, 0);
 startActivity(getIntent());
 overridePendingTransition(0, 0);
30
AMAN SINGH

Je devais mettre à jour rapidement une liste de messages dans l'une de mes applications. Je venais donc d'actualiser mon activité principale d'interface utilisateur avant de fermer la boîte de dialogue dans laquelle j'étais auparavant. Je suis sûr qu'il existe de meilleures façons de le faire. 

// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
10
ninehundredt

Android comprend un système de gestion des processus qui gère la création et la destruction d'activités, ce qui annule en grande partie tout avantage que vous verriez du redémarrage manuel d'une activité. Vous pouvez voir plus d'informations à ce sujet sur Principes de base de l'application

La bonne pratique consiste toutefois à veiller à ce que vos méthodes onPause et onStop libèrent toutes les ressources inutiles et utilisez onLowMemory pour réduire au minimum les besoins de votre activité.

9
Al Sutton

J'ai déjà vu des réponses sur le rechargement de l'activité à l'aide de l'intention. Ceux-ci fonctionneront, mais vous pouvez également faire la même chose en utilisant la méthode recreate () indiquée dans la classe d'activité elle-même.

Au lieu d'écrire ceci

// Actualiser l'activité principale à la fermeture de la boîte de dialogue

Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();

Ceci peut être fait en écrivant ceci seulement

recreate();
6
Rizwan

Commencez avec l'intention de votre même activity et fermez la activity.

Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.
5
Elenasys

j'ai le même problème

import Android.support.v4.content.IntentCompat;

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

ce code fonctionne pour moi . Api Android 17

2

dans certains cas, c'est la meilleure pratique dans d'autres, ce n'est pas une bonne idée de le faire, elle dépend du contexte.

    Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);    
    startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);

la chose est que chaque fois que vous terminez () de activityIWishToRun vous revenez à votre activité vivante

2
yoav.str

Dans une activité, vous pouvez appeler recreate() pour "recréer" l'activité (API 11+)

1
user10180461

Après avoir expérimenté cela pendant un moment, je n'ai trouvé aucune conséquence inattendue du redémarrage d'une activité. De plus, je pense que cela ressemble beaucoup à ce que fait Android par défaut lorsque l'orientation change. Je ne vois donc aucune raison de ne pas le faire dans des circonstances similaires.

1
hpique

Je ne pense pas que ce soit une bonne idée ... il serait préférable de mettre en œuvre une méthode plus propre. Par exemple, si votre activité contient un formulaire, la méthode de nettoyage pourrait simplement effacer chaque widget du formulaire et supprimer toutes les données temporaires. Je suppose que c'est ce que vous voulez: restaurer l'activité à son état initial.

1
Cristian

simplement utiliser 

this.recreate();

cela déclenchera la méthode onCreate dans l'activité

1
Yasiru Nayanajith

J'avais une autre approche comme celle-ci: régler la launchMode de mon activité sur singleTop et sans appeler finish(), juste startActivity(getIntent()) ferait l'affaire. Il suffit de se préoccuper des nouvelles données à la fois dans onCreate() et onNewIntent. Avec Sush, l’application peut clignoter comme l’a dit AMAN SINGH. Mais l'approche de AMAN SINGH créera toujours une nouvelle activité qui, d'une certaine manière, est inutile, même s'il corrigeait le problème du "clignotement", je pense.

Trop tard pour cette question, mais si quelqu'un cherche une solution, la voici.

0
WALKER

Recharger toute votre activité peut être une lourde tâche

override fun onResume() {
    super.onResume()
  //here...
}

Java:

@Override
public void onResume(){
      super.onResume();
//here...

}

et appelez "onResume ()" chaque fois que nécessaire.

0
sam_coder