Es wird empfohlen, zu verwenden OnBackInvokedCallback oder androidx.activity.OnBackPressedCallback um stattdessen die Rückwärtsnavigation zu behandeln. Jeder kann mir helfen, die aktualisierte Methode zu verwenden.
Beispiel:
Anwendungsfall: ich benutze if (isTaskRoot) {} Innerhalb onBackPressed(){} Die Methode zum Überprüfen der Aktivität ist die letzte auf dem Aktivitätsstapel.
override fun onBackPressed() {
if (isTaskRoot) { // Check this activity is last on the activity-stack.(Check Whether This activity opened from Push-Notification)
startActivity(Intent(mContext, Dashboard::class.java))
finish()
} else {
finishWithResultOK()
}
}
Wenn Sie nur anrufen super.onBackPressed(), dann können Sie die Methode einfach vollständig entfernen, da Sie kein benutzerdefiniertes Back-Verhalten schreiben. Wenn du sind Benutzerdefiniertes Back-Verhalten schreiben, zeigen Sie Ihren Code.
– ianhanniballake
15. Juni um 16:19 Uhr
@ianhanniballake , ich benutze if (isTaskRoot) {} Innerhalb onBackPressed() zu überprüfende Aktivität ist die letzte auf dem Aktivitätsstapel. Ich habe die Frage auch aktualisiert.
– Rumit Patel
23. Juni um 13:08 Uhr
Sie sollten dies auf keiner API-Ebene tun. Bitte geben Sie Ihren Code an.
– ianhanniballake
23. Juni um 13:27 Uhr
Durch Klicken auf die Push-Benachrichtigung öffnet sich die Produktdetailseite. Wenn die App geschlossen ist, gelangt der Benutzer nun auf die Produktdetailseite, indem er auf Push-Benachrichtigung klickt. Wenn Sie dann auf Backpress klicken, sollte der Benutzer die App nicht direkt verlassen. für diesen Fall verwende ich onBackPressed().
– Rumit Patel
23. Juni um 14:36 Uhr
Hast du das herausgefunden isTaskRoot bedingt? Die meisten Antworten scheinen sich sehr auf triviale Anwendungsfälle zu konzentrieren.
// kotlin
import androidx.activity.addCallback
if (BuildCompat.isAtLeastT()) {
onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT
) {
// Back is pressed... Finishing the activity
finish()
}
} else {
onBackPressedDispatcher.addCallback(this /* lifecycle owner */, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// Back is pressed... Finishing the activity
finish()
}
})
}
AKTUALISIEREN:
Danke an den Kommentar von @ianhanniballake; kannst du einfach verwenden OnBackPressedDispatcher sogar in API-Level 33+
Der OnBackPressedDispatcher verwendet bereits intern die Android T-spezifische API, wenn Activity 1.6+ verwendet wird.
Sie können also einfach Folgendes tun:
// kotlin
import androidx.activity.addCallback
onBackPressedDispatcher.addCallback(this /* lifecycle owner */, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// Back is pressed... Finishing the activity
finish()
}
})
// java
import androidx.activity.OnBackPressedCallback;
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
// Back is pressed... Finishing the activity
finish();
}
});
Beachten Sie, dass Sie die nicht überschreiben sollten onBackPressed() wie das machen wird onBackPressedDispatcher Rückruf nicht zu feuern; Überprüfen Sie diese Antwort, um dies zu verdeutlichen.
Das OnBackPressedDispatcher wird bereits intern die Android T-spezifische API verwenden, wenn Activity 1.6+ verwendet wird, daher gibt es absolut keinen Grund, die Android T-APIs jemals direkt zu verwenden – Sie können einfach die verwenden OnBackPressedDispatcher auf allen API-Ebenen.
– ianhanniballake
15. Juni um 16:46 Uhr
Das Problem, das ich hier sehe, ist, dass Sie jetzt zwei Möglichkeiten haben, mit der Gegenpresse umzugehen, was etwas chaotisch ist. Gibt es eine Möglichkeit, das Überschreiben des alten einzuschränken? onBackPressed?
– Bitweise DEVS
25. Juni um 22:02 Uhr
Wie kann ich aufrufen OnBackPressedCallbackhandleOnBackPressed sagen wir programmgesteuert, ich habe eine Schaltfläche, die anrufen muss onBackPressed() programmatisch?
– Bitweise DEVS
25. Juni um 22:14 Uhr
@BitwiseDEVS AFAIK, immer noch onBackPressed() Entwicklern ausgesetzt; bei einigen neueren APIs sollte dies nicht der Fall sein; aber beide gleichzeitig zu handhaben ist nicht so richtig wie die Note am Ende der Antwort.
– Zain
27. Juni um 22:20 Uhr
@Zain Es war meine Schuld: Ich habe Activity statt AppCompatActivity erweitert. Es tut uns leid!
– Luis A. Florit
16. Oktober um 0:48 Uhr
Ersetzen Sie onBackPressed() durch den folgenden Code.
onBackPressedDispatcher.onBackPressed()
Einfach & sauber!
– Rajesh Koshti
8. November um 10:03 Uhr
AIShakil
Mit einer Kombination aus Top-Antworten. Hier ist eine Lösung:
1. Wenn Sie die Zurück-Taste drücken müssen, kopieren Sie Folgendes:
Hinweis: Ihre Aktivität wird automatisch zerstört.
Wenn Sie nur anrufen
super.onBackPressed()
, dann können Sie die Methode einfach vollständig entfernen, da Sie kein benutzerdefiniertes Back-Verhalten schreiben. Wenn du sind Benutzerdefiniertes Back-Verhalten schreiben, zeigen Sie Ihren Code.– ianhanniballake
15. Juni um 16:19 Uhr
@ianhanniballake , ich benutze
if (isTaskRoot) {}
InnerhalbonBackPressed()
zu überprüfende Aktivität ist die letzte auf dem Aktivitätsstapel. Ich habe die Frage auch aktualisiert.– Rumit Patel
23. Juni um 13:08 Uhr
Sie sollten dies auf keiner API-Ebene tun. Bitte geben Sie Ihren Code an.
– ianhanniballake
23. Juni um 13:27 Uhr
Durch Klicken auf die Push-Benachrichtigung öffnet sich die Produktdetailseite. Wenn die App geschlossen ist, gelangt der Benutzer nun auf die Produktdetailseite, indem er auf Push-Benachrichtigung klickt. Wenn Sie dann auf Backpress klicken, sollte der Benutzer die App nicht direkt verlassen. für diesen Fall verwende ich
onBackPressed().
– Rumit Patel
23. Juni um 14:36 Uhr
Hast du das herausgefunden
isTaskRoot
bedingt? Die meisten Antworten scheinen sich sehr auf triviale Anwendungsfälle zu konzentrieren.– TWiStErRob
9. Oktober um 21:03 Uhr