android-intent fragment - Android:Zurück zur vorherigen Aktivität




add listener (18)

Ich möchte etwas einfaches auf Android-App tun. Wie ist es möglich, zu einer früheren Aktivität zurückzukehren?

Welchen Code benötige ich, um zu früheren Aktivitäten zurückzukehren?


Answers

Rufen Sie diese Methode einfach auf, um die aktuelle Aktivität zu beenden oder um mit onBackPressed zurückzukehren

finish();

ODER

onBackPressed();

Wenn Sie die Datei AndroidManifest.xml mit der übergeordneten Aktivität ordnungsgemäß eingerichtet haben, können Sie Folgendes verwenden:

NavUtils.navigateUpFromSameTask(this);

Wo das ist deine Kinderaktivität.


Android-Aktivitäten werden im Aktivitätsstapel gespeichert. Zurück zu einer vorherigen Aktivität könnte zwei Dinge bedeuten.

  1. Sie haben die neue Aktivität aus einer anderen Aktivität mit startActivityForResult geöffnet . In diesem Fall können Sie einfach die Funktion finishActivity () aus Ihrem Code aufrufen, und Sie gelangen zurück zur vorherigen Aktivität.

  2. Verfolgen Sie den Aktivitätsstapel. Wenn Sie eine neue Aktivität mit einer Absicht starten, können Sie eine Absichtskennung wie FLAG_ACTIVITY_REORDER_TO_FRONT oder FLAG_ACTIVITY_PREVIOUS_IS_TOP . Sie können dies verwenden, um zwischen den Aktivitäten in Ihrer Anwendung zu wechseln. Hab sie aber nicht oft benutzt. Schau dir die Flaggen hier an: http://developer.android.com/reference/android/content/Intent.html

Wie in den Kommentaren erwähnt, wenn die Aktivität mit startActivity() geöffnet wird, kann man sie mit finish() . Wenn Sie die Schaltfläche "Nach oben" verwenden möchten, können Sie diese in der onOptionsSelected(MenuItem item) abfangen, indem Sie die ID des Elements gegen android.R.id.home Gegensatz zu R.id.home wie in den Kommentaren erwähnt.


Versuchen Sie Activity#finish() . Das ist mehr oder weniger das, was die Zurück-Schaltfläche standardmäßig tut.


 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
      int id = item.getItemId();

      if ( id == android.R.id.home ) {
          finish();
          return true;
      }

      return super.onOptionsItemSelected(item);
 }

Probieren Sie es aus, es funktioniert sowohl auf der Symbolleiste Zurück als Hardware-Schaltfläche zurück .


@Override
public void onBackPressed() {
    super.onBackPressed();
}

und wenn Sie auf Knopf klicken möchten, gehen Sie zurück und dann einfach

bbsubmit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});

Möchten Sie die Kontrolle über das Verhalten des Zurück-Buttons übernehmen? Sie können die Zurück-Schaltfläche (um zu einer bestimmten Aktivität zu wechseln) über eine von zwei Methoden überschreiben.

Für Android 1.6 und niedriger:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

Oder wenn Sie nur Android 2.0 oder höher unterstützen:

@Override
public void onBackPressed() {
    // do something on back.
    return;
}

Für weitere Details: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html


Wenn du nur zur vorherigen Aktivität gehen willst, benutze

finish();

ODER

onBackPressed();

Wenn du zur zweiten Aktivität oder darunter gehen willst, benutze folgendes:

intent = new Intent(MyFourthActivity.this , MySecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//Bundle is optional
Bundle bundle = new Bundle();
bundle.putString("MyValue1", val1);
intent.putExtras(bundle);
//end Bundle
startActivity(intent);

Fügen Sie dies in Ihrer onCLick () -Methode hinzu, um zu Ihrer vorherigen Aktivität zurückzukehren

Fertig();

oder Sie können dies verwenden. Es hat perfekt für mich funktioniert

 @Override
  public boolean onOptionsItemSelected(MenuItem item) {
  int id = item.getItemId();

      if ( id == android.R.id.home ) {
         finish();
         return true;
       }

  return super.onOptionsItemSelected(item);
  }

Probieren Sie dies aus, indem Sie die Taste "Zurück" drücken

finish();
onBackPressed();

Alle neuen Aktivitäten / Intents haben standardmäßig das vorherige / vorherige Verhalten, es sei denn, Sie haben für die aufrufende Aktivität ein finish() programmiert.


Ich empfehle die NavUtils.navigateUpFromSameTask (), es ist einfach und sehr einfach, Sie können es von der Google-Entwickler lernen.Wünschte, ich könnte Ihnen helfen!


Habe das gleiche Problem und

finish();  OR super.onBackPressed();

funktionierte gut für mich, beide arbeiteten gleich, aber kein Glück mit der return


Versuchen Sie es einfach in der ersten Aktivität

Intent mainIntent = new Intent(Activity1.this, Activity2.class);
this.startActivity(mainIntent);

In deiner zweiten Aktivität

@Override
public void onBackPressed() {
    this.finish();
}

Starten Sie die zweite Aktivität mit intent (verwenden Sie entweder startActivity oder startActivityForResult gemäß Ihren Anforderungen). Wenn der Benutzer nun die Zurück-Taste drückt, wird die aktuelle Aktivität oben geschlossen und die vorherige wird angezeigt.

Nun sagen wir, Sie haben zwei Aktivitäten, eine für die Auswahl einiger Einstellungen für den Benutzer, wie Sprache, Land usw., und nach der Auswahl klickt der Benutzer auf Weiter, um zum Anmeldeformular zu gelangen (zum Beispiel). Wenn die Anmeldung nicht erfolgreich war, wird der Benutzer die Anmeldeaktivität durchführen. Was ist, wenn die Anmeldung erfolgreich war?

Wenn die Anmeldung erfolgreich ist, müssen Sie eine andere Aktivität starten. Es bedeutet, dass eine dritte Aktivität gestartet wird und immer noch zwei Aktivitäten ausgeführt werden. In diesem Fall startActivityForResult es sich, startActivityForResult zu verwenden. Wenn die Anmeldung erfolgreich war, senden Sie die OK-Daten an die erste Aktivität zurück und schließen Sie die Anmeldeaktivität. Wenn die Daten empfangen wurden, starten Sie die dritte Aktivität und schließen Sie die erste Aktivität mit finish.


intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Dadurch werden Sie zu einer vorherigen Aktivität geführt, die ihren Stack behält und alle Aktivitäten danach aus dem Stack löscht.

Wenn der Stapel beispielsweise A-> B-> C-> D ist und Sie B mit diesem Flag starten, wird der Stapel A-> B sein


Neben all den erwähnten Antworten, ist dies immer noch ein alternativer Weg, sagen wir, Sie haben zwei Klassen, Klasse A und Klasse B.

Klasse A Sie haben einige Aktivitäten wie Checkbox ausgewählt, einige Daten und Absicht zu Klasse B ausgedruckt. Klasse B, möchten Sie mehrere Werte an Klasse A übergeben und den vorherigen Zustand der Klasse A beibehalten, können Sie diese Alternative ausprobieren Methode oder Download Quellcode, um dies zu demonstrieren

http://whats-online.info/science-and-tutorials/125/Android-maintain-the-previous-state-of-activity-on-intent/

oder

http://developer.android.com/reference/android/content/Intent.html


Nicht sicher, ob meine Lösung missbilligt wird oder nicht, aber ich verwende einen gebundenen Dienst, um den ViewModel-Status beizubehalten. Ob Sie es im Dienst im Speicher ablegen oder aus einer SqlLite-Datenbank abrufen und abrufen, hängt von Ihren Anforderungen ab. Dies ist, was Dienste jeder Art tun, sie bieten Dienste wie die Aufrechterhaltung des Anwendungsstatus und abstrakte allgemeine Geschäftslogik.

Aufgrund von Speicher- und Verarbeitungsbeschränkungen bei mobilen Geräten behandle ich Android-Ansichten ähnlich wie eine Webseite. Die Seite behält den Status nicht bei, es handelt sich lediglich um eine Präsentationsschichtkomponente, deren einziger Zweck darin besteht, den Anwendungsstatus darzustellen und Benutzereingaben zu akzeptieren. Jüngste Trends in der Web-App-Architektur verwenden das uralte MVC-Muster (Model, View, Controller), bei dem die Seite die View ist, die Domänendaten das Modell sind und der Controller hinter einem Webdienst sitzt. Das gleiche Muster kann in Android verwendet werden, wobei die Ansicht gut ist. Die Ansicht, das Modell sind Ihre Domänendaten und der Controller ist als Android-gebundener Dienst implementiert. Wann immer Sie möchten, dass eine Ansicht mit dem Controller interagiert, binden Sie beim Starten / Fortsetzen eine Verbindung dazu und bei Stopp / Pause die Bindung auf.

Dieser Ansatz bietet Ihnen den zusätzlichen Vorteil der Durchsetzung des Konstruktionsprinzips "Separation of Concern", da die gesamte Geschäftslogik Ihrer Anwendung in Ihren Service verschoben werden kann, wodurch doppelte Logik in mehreren Ansichten reduziert wird und die Ansicht die Erzwingung eines weiteren wichtigen Konstruktionsprinzips, "Single Responsibility", ermöglicht.





android android-intent android-activity