Okay, ich bin irgendwie ratlos, was ich damit anfangen soll. Ich habe also die Hauptaktivität, und von dort kann eine Aktivität zu DegreePlanActivity gestartet werden, und von dort kann eine andere Aktivität zu EditDegreePlan gestartet werden. Ich habe EditDegreePlan im AndroidManifest auf noHistory gesetzt. Das Problem ist, dass nach dem Speichern des EditDegreePlan eine Aktivität für DegreePlan gestartet wird. Wenn der Benutzer also Zurück drückt, muss er zweimal drücken, um wieder zu MainActivity zu gelangen. Ich möchte das loswerden, damit sie es nur einmal drücken müssen. Ich bin jedoch ratlos, wie das geht.
Wenn ich DegreePlanActivity auf noHistory setze, können sie in EditDegreePlan nicht auf Zurück drücken.
Ich habe versucht, die onBackPressed-Methode zu überschreiben und eine Absicht für MainActivity zu starten. Das Problem ist dann, dass sie mehrmals Zurück drücken müssen, um die App dann zu beenden.
Was soll ich machen?
Antworten:
FLAG_ACTIVITY_CLEAR_TOP löscht Ihren Aktivitätsstapel. Sie können den folgenden Code verwenden:
Intent intent = new Intent(this, Activity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
Denken Sie daran, dass dieses Flag nur Zwischenaktivitäten löscht, wenn Sie beispielsweise A, B, C in Ihrem
Back Stack
Wechsel von C-Aktivität zu D mit diesem Flag haben, wird dies nicht gelöschtBack Stack
und der Stapel wäre A, B, C, D, aber wenn Sie Wechseln Sie mit diesem Flag von Aktivität D zu Aktivität A. B, C, D Aktivitäten werden vom Stapel angezeigt und Sie haben nur A im hinteren Stapel.quelle
einfache Lösung für API> = 15 bis API 23 Benutzeraktivitätsname in Absicht.
Intent nextScreen = new Intent(currentActivity.this, MainActivity.class); nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); startActivity(nextScreen); ActivityCompat.finishAffinity(currentActivity.this);
quelle
Ich würde vorschlagen, dass Sie
startActivityForResult()
statt einfach verwendenstartActivity()
, wenn Sie die EditDegreePlan-Aktivität starten, wie in den Android-Tutorials beschrieben .In der EditDegreePlan-Aktivität rufen Sie dann auf
setResult(RESULT_OK); finish();
Wenn Sie keine Daten von der EditDegreePlan-Aktivität erwarten, müssen Sie die nicht unbedingt implementieren
onActivityResult
.quelle
startActivityForResult
. Wenn sie fertig sind, sind sie aus dem Stapel. Vielen Dank!Es scheint, dass Sie das gewünschte Verhalten erhalten, wenn Sie überhaupt keine Flags angeben. Der Zurück-Knopf würde genau das Richtige tun. Um eine Aktivität aus Ihrem Code heraus zu schließen, verwenden Sie die
finish()
Methode, die den gleichen Effekt hat wie der Benutzer, der die Zurück-Taste drückt. Sie gelangen also automatisch zu DegreePlan, wenn Sie den EditDegreePlan beenden. Sie müssen auch keinen aufrufenIntents
.quelle
Um Aktivitäten aus dem Backstack im Manifest zu entfernen, fügen Sie
android:noHistory="true"
sie Ihrer Aktivität in der Manifestdatei hinzu.Siehe Beispiel unten.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.activity" android:versionCode="1" android:versionName="1.0"> <application android:name="MyApp" android:label="My Application"> <activity android:name=".LoginActivity" android:noHistory="true"> //add this line to your activity inside manifest <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
quelle
Sie können finish aufrufen, bevor Sie mit Ihrer neuen Aktivität beginnen. Dadurch wird die aktuelle Aktivität aus dem Stapel entfernt. Wenn Sie also die Zurück-Taste der nächsten Aktivität drücken, wird die erste Aktivität nicht aus dem Stapelverlauf aufgerufen.
Intent i = new Intent(MainActivity.this, NextActivity.class); finish(); startActivity(i);
quelle
Hier ist dein Fluss:
MainActivity -> DegreePlanActivty -> EditDegreePlan -> DegreePlan -> MainActivty
Überschreiben Sie diese Methode in Ihrem "DegreePlan"
public void onBackPressed() { super.onBackPressed(); Intent goToMainActivity = new Intent(getApplicationContext(), MainActivity.class); goToMainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Will clear out your activity history stack till now startActivity(goToMainActivity); }
quelle
Verwenden Sie dies, um den Stapel zu löschen:
menuIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
quelle
Intent intent = new Intent(getContext(), MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent);
quelle
Sie können Flags wie folgt hinzufügen und Aktivität starten. Versuchen Sie es mit dem folgenden Code
Intent i = new Intent(activity, Payment.class); i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP); activity.startActivity(i);
quelle
This code should help you out: It is in Kotlin private fun verifyIfUserIsLoggedIn(){ val uid = FirebaseAuth.getInstance().uid if(uid== null){ val intent = Intent(this, MainActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK) startActivity(intent) } }
quelle