webentwicklung-frage-antwort-db.com.de

Aktivität in Android neu laden

Ist es eine gute Praxis, eine Activity in Android nachzuladen?

Was wäre der beste Weg, dies zu tun? this.finish und dann this.startActivity mit der Aktivität Intent?

181
hpique

Sie können einfach verwenden 

finish();
startActivity(getIntent());

um eine Activity aus sich heraus zu aktualisieren.

440
Sush

Dies ist, was ich mache, um die Aktivität nach einem Wechsel von einer Präferenzänderung wieder zu laden.

@Override
protected void onResume() {

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

Dadurch wird die Aktivität im Wesentlichen neu gezeichnet.

Aktualisiert: Eine bessere Möglichkeit ist, die recreate()-Methode aufzurufen. Dadurch wird die Aktivität neu erstellt.

32
kingargyle

für diejenigen, die nicht sehen wollen, dass blink nach der recreate () -Methode einfach verwendet

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

Ich musste eine Nachrichtenliste in einer meiner Anwendungen eilig aktualisieren, also habe ich gerade meine Hauptbenutzeraktivitäten aktualisiert, bevor ich den Dialog schloss, in dem ich mich befand. Ich bin sicher, dass es auch bessere Möglichkeiten gibt, dies zu erreichen. 

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

Android umfasst ein Prozessverwaltungssystem, das die Erstellung und Zerstörung von Aktivitäten übernimmt, wodurch der Nutzen, den Sie beim manuellen Neustarten einer Aktivität sehen würden, weitgehend zunichte gemacht wird. Weitere Informationen dazu finden Sie unter Application Fundamentals

Es ist jedoch empfehlenswert, sicherzustellen, dass Ihre Methoden onPause und onStop alle Ressourcen freigeben, für die Sie keine Ressourcen benötigen, und verwenden Sie onLowMemory , um Ihre Aktivitäten auf ein Minimum zu reduzieren.

9
Al Sutton

Ich habe frühere Antworten gesehen, die zum erneuten Laden der Aktivität mit Intent gegeben wurden. Dies funktioniert, aber Sie können dasselbe auch mit der recreate () -Methode tun, die in der Activity-Klasse selbst angegeben ist.

Anstatt dies zu schreiben

// Hauptaktivität beim Schließen des Dialogfelds aktualisieren

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

Dies kann nur durch Schreiben erfolgen

recreate();
6
Rizwan

Beginnen Sie mit einem Intent Ihrer gleichen activity und schließen Sie die activity.

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

ich habe das gleiche Problem

import Android.support.v4.content.IntentCompat;

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

dieser Code funktioniert für mich . Android API 17

2

in einigen Fällen ist es die beste Vorgehensweise in anderen, es ist keine gute Idee.

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

die Sache ist, wann immer Sie () von activityIWishToRun beenden, kehren Sie zu Ihrer lebendigen Aktivität zurück

2
yoav.str

In einer Aktivität können Sie recreate() aufrufen, um die Aktivität "neu zu erstellen" (API 11+).

1
user10180461

Nachdem ich eine Weile damit experimentiert habe, habe ich keine unerwarteten Folgen eines Neustarts einer Aktivität gefunden. Ich glaube auch, dass dies sehr ähnlich ist, was Android standardmäßig tut, wenn sich die Ausrichtung ändert. Ich sehe keinen Grund, es unter ähnlichen Umständen nicht zu tun.

1
hpique

Ich denke nicht, dass dies eine gute Idee ist ... es wäre besser, eine sauberere Methode zu implementieren. Wenn Ihre Aktivität beispielsweise ein Formular enthält, kann die Bereinigungsmethode einfach jedes Widget im Formular löschen und alle temporären Daten löschen. Ich denke, das ist es, was Sie wollen: Stellen Sie die Aktivität wieder in den Ausgangszustand.

1
Cristian

einfach verwenden 

this.recreate();

dadurch wird die onCreate-Methode in der Aktivität ausgelöst

1

Ich hatte einen anderen Ansatz wie: Setzen der launchMode meiner Aktivität auf singleTop und ohne Aufruf von finish() wird nur startActivity(getIntent()) die Aufgabe erledigen. Müssen Sie sich nur um die neuen Daten kümmern, sowohl in onCreate() als auch in onNewIntent. Auf die Weise von Sush kann die Anwendung wie AMAN SINGH blinken. Aber AMAN SINGHs Ansatz wird immer noch eine neue Aktivität schaffen, die irgendwie unnötig ist, selbst wenn er das "Blinzeln" -Problem behoben hat, denke ich.

Zu spät für diese Frage, aber wenn jemand nach einer Lösung sucht, hier ist sie.

0
WALKER

Das erneute Laden Ihrer gesamten Aktivität kann eine schwere Aufgabe sein. Geben Sie einfach den Teil des Codes ein, der aktualisiert werden muss (kotlin):

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

Java:

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

}

und rufen Sie bei Bedarf "onResume ()" auf.

0
sam_coder