Ich möchte eine Aktivität aus einer anderen Aktivität beenden, wie zum Beispiel:
In Aktivität [A] rufe ich beim Klicken auf die Schaltfläche Aktivität [B] auf, ohne Aktivität [A] zu beenden.
In Aktivität [B] gibt es jetzt zwei Schaltflächen: Neu und Ändern . Wenn der Benutzer auf Ändern klickt, wird eine Aktivität [A] mit allen aktivierten Optionen vom Stapel genommen.
Wenn der Benutzer jedoch in Aktivität [B] auf die Schaltfläche Neu klickt , muss ich Aktivität [A] vom Stapel beenden und diese Aktivität [A] erneut in den Stapel laden.
Ich versuche es, aber ich kann Aktivität [A] nicht vom Stapel aus beenden ... Wie kann ich das tun?
Ich benutze den Code als:
Aus Aktivität [A]:
Intent GotoB = new Intent(A.this,B.class);
startActivityForResult(GotoB,1);
Eine andere Methode in der gleichen Aktivität
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 1)
{
if (resultCode == 1) {
Intent i = getIntent();
overridePendingTransition(0, 0);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(i);
}
}
}
Klicken Sie in Aktivität [B] auf die Schaltfläche:
setResult(1);
finish();
Antworten:
Machen Sie Ihre Aktivität A in der Manifestdatei:
launchMode = "singleInstance"
Wenn der Benutzer auf Neu klickt, führen Sie
FirstActivity.fa.finish();
die neue Absicht aus und rufen Sie sie auf.Wenn der Benutzer auf Ändern klickt, rufen Sie die neue Absicht auf oder beenden Sie einfach Aktivität B.
ERSTER WEG
Deklarieren Sie in Ihrer ersten Aktivität eine
Activity object
wie folgt:Verwenden Sie nun dieses Objekt in einem anderen
Activity
, um die erste Aktivität wie diese zu beenden.ZWEITER WEG
Während Sie Ihre Aktivität aufrufen,
FirstActivity
die Sie beenden möchten, sobald Sie fortfahren, können Sie während des Anrufs ein Flag hinzufügenFirstActivity
Mit diesem Flag wird die Aktivität jedoch beendet, auch wenn Sie dies nicht möchten. und irgendwann,
onBack
wenn Sie das zeigen wollen, müssenFirstActivity
Sie es mit Absicht aufrufen.quelle
Das können Sie tun, aber ich denke, Sie sollten den normalen Aktivitätsfluss nicht unterbrechen. Wenn Sie Ihre Aktivität beenden möchten, können Sie einfach eine Sendung von Ihrer Aktivität B an Aktivität A senden.
Erstellen Sie einen Rundfunkempfänger, bevor Sie mit Aktivität B beginnen:
Senden Sie eine Sendung von Aktivität B an Aktivität A, wenn Sie Aktivität A von B beenden möchten
Ich hoffe es wird für dich funktionieren ...
quelle
broadcast_receiver
beiunregisterReceiver()
Dies ist eine ziemlich normale Kommunikationsfrage. Ein Ansatz wäre die Verwendung eines ResultReceivers in Aktivität A:
und dann in Aktivität B können Sie es einfach auf Anfrage wie folgt beenden:
Versuchen Sie so etwas.
quelle
Es gibt einen Ansatz, den Sie in Ihrem Fall verwenden können.
Schritt 1: Starten Sie Aktivität B von Aktivität A.
Schritt 2: Wenn der Benutzer auf die Schaltfläche Ändern klickt, starten Sie Aktivität A mit
FLAG_ACTIVITY_CLEAR_TOP
.Auch, übergeben Sie das Flag zusätzlich.Schritt 3: Wenn der Benutzer auf die Schaltfläche Hinzufügen klickt, starten Sie Aktivität A mit
FLAG_ACTIVITY_CLEAR_TOP
.Auch, übergeben Sie das Flag zusätzlich.FLAG_ACTIVITY_CLEAR_TOP
löscht alle geöffneten Aktivitäten bis zum Ziel und startet neu, wenn in der Zielaktivität kein Startmodus definiert istSchritt 4: Jetzt muss die
onCreate()
Methode der Aktivität A dieses Flag abrufen.quelle
Beginnen Sie Ihre Aktivität mit dem Anforderungscode:
Und Sie können es von jeder anderen Aktivität wie dieser schließen:
quelle
Siehe meine Antwort auf die Frage zum Stapelüberlauf. Beenden Sie alle vorherigen Aktivitäten .
Was Sie brauchen, ist das Hinzufügen der
Intent.FLAG_CLEAR_TOP
. Dieses Flag stellt sicher, dass alle Aktivitäten über der Zielaktivität im Stapel beendet sind und dass eine angezeigt wird.Eine andere Sache, die Sie brauchen, ist die
SINGLE_TOP
Flagge. Mit dieser Option verhindern Sie, dass Android eine neue Aktivität erstellt, wenn bereits eine im Stapel erstellt wurde.Seien Sie nur vorsichtig, wenn die Aktivität bereits erstellt wurde, wird die Absicht mit diesen Flags in der aufgerufenen Methode
onNewIntent(intent)
(Sie müssen sie überladen, um sie zu verarbeiten) in der Zielaktivität übermittelt.Dann
onNewIntent
haben Sie eine Methode namens Neustart oder etwas, dasfinish()
eine neue Absicht für sich selbst aufruft und startet, oder einerepopulate()
Methode, die die neuen Daten festlegt. Ich bevorzuge den zweiten Ansatz, er ist kostengünstiger und Sie können dieonCreate
Logik jederzeit in eine separate Methode extrahieren, die Sie zum Auffüllen aufrufen können.quelle
Ich habe gerade Nepsters Lösung angewendet und funktioniert wie ein Zauber. Es gibt eine geringfügige Änderung, um es von einem Fragment auszuführen.
Zu deinem Fragment
Und zu Ihrem OnNewIntent () der Aktivität möchten Sie neu starten.
quelle
Ich denke, ich habe den einfachsten Ansatz ... beim Drücken von new in B ..
und in A bekommen Sie es
quelle
Ich weiß, dass dies eine alte Frage ist. Einige dieser Methoden haben bei mir nicht funktioniert. Für alle, die in die Zukunft schauen oder meine Probleme haben, hat dies bei mir funktioniert
Ich habe diese Methode überschrieben
onPause
und aufgerufenfinish()
.quelle
Erst anrufen,
startactivity()
dann verwendenfinish()
quelle