Deaktivieren Sie die Zurück-Schaltfläche in Android

332

Wie deaktiviere ich die Schaltfläche "Zurück" in Android, während ich die Anwendung abmelde?

Anmut
quelle
1
Können Sie die Frage etwas klarer formulieren? Wenn Sie das Standardverhalten der Zurück-Schaltfläche überschreiben möchten, lesen Sie diese Frage hier. stackoverflow.com/questions/2000102/…
Gopinath
26
Bitte tun Sie dies nicht, es sei denn, Sie haben einen guten Grund, da das Brechen des erwarteten Betriebsmodells die gesamte Plattform leicht verletzt
Hamy
14
Sie möchten es tun, wenn Sie es mit einem dummen Samsung S4 zu tun haben, bei dem die Zurück-Taste berührungsempfindlich (nicht physisch) ist, direkt am Rand des Telefons, das bereits so berührungsempfindlich ist, dass eine Handfläche an der Seite anliegt geh zurück.
Knoblauchmann
1
Es ist gegen Android Quality and Design Guide , Rolle UX-N1.
MiguelSlv

Antworten:

650

Überschreiben Sie die onBackPressed-Methode und tun Sie nichts, wenn Sie die Zurück-Taste auf dem Gerät bedienen möchten.

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}
Gopinath
quelle
12
Dies ist viel besser und sauberer als das Überschreiben der wichtigsten Handhabungsmethoden und hat den gleichen Effekt. Gute Antwort!
Nik Reiman
2
Großartige Lösung, Alter. Gibt es eine Möglichkeit, dies mit der Home-Taste zu tun?
Datta Kunde
1
Das ist toll! Eigentlich wollte ich immer zu meiner Hauptaktivität zurückkehren, wenn ich von einer anderen Aktivität zurückdrücke, und wenn ich diese Methode überschreibe, kann ich das sehr einfach tun.
Jim
Hoppla, ich habe vergessen, super.onBackPressed () zu entfernen.
Aristo Michael
172

Wenn Sie nach einem höheren API-Level 2.0 und höher suchen, funktioniert dies hervorragend

@Override
public void onBackPressed() {
    // Do Here what ever you want do on back press;
}

Wenn Sie nach Android API Level bis 1.6 suchen.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
     //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
     return true;
     }
     return super.onKeyDown(keyCode, event);    
}

Schreiben Sie den obigen Code in Ihre Aktivität, um zu verhindern, dass die Zurück-Taste gedrückt wird

Javanator
quelle
5
Diese Methode ist abwärtskompatibler als die Verwendung von onbackpressed aufgrund der API-Level-Anforderung von
onbackpressed
5
Gute Antwort. Obwohl ich es für mein Projekt nicht benötige, weiß ich zu schätzen, dass Sie sowohl die alten als auch die neuen Methoden bereitgestellt haben. Dies sollte als richtige Antwort markiert werden. +1
Jim
1
@Javanator der zweite würde nicht für mich funktionieren (zum Beispiel für API Level 16), aber der erste funktioniert wie ein Zauber
Noloman
38

Sie können dies auf einfache Weise tun. Rufen Sie nicht super.onBackPressed () auf.

Hinweis: - Tun Sie dies nur, wenn Sie einen starken Grund dafür haben.

@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}
Iman Marashi
quelle
6
Eine Erklärung, warum nicht, wäre großartig. Vielen Dank.
Fast ein Anfänger
Nicht anrufen .super ist wichtig!
Ran
3
@almostabeginner, da das Nichtanrufen von Super die normale Verwendung der Zurück-Schaltfläche ungültig macht. Benutzer werden ausflippen, wenn eine normal funktionierende Taste nicht mehr funktioniert. Sie denken möglicherweise, dass die App fehlerhaft ist oder das Telefon nicht richtig funktioniert usw. Ihre App wird am Ende der Schuldige sein.
Bengongon97
22

Überschreiben Sie einfach die onBackPressed () -Methode.

@Override
public void onBackPressed() { }
Pankaj Kumar
quelle
13

Ich benutze es.............

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK)
        Toast.makeText(getApplicationContext(), "back press",      
     Toast.LENGTH_LONG).show();

    return false;
       // Disable back button..............
}
Mahmudul Haque Khan
quelle
9

Wenn Sie sicherstellen möchten, dass Ihre Android-Client-Anwendung von einem Server abgemeldet ist, bevor Ihre Aktivität beendet wird -> melden Sie sich mit einem Dienst in einem eigenen Thread ab (das sollten Sie sowieso tun).

Durch Deaktivieren der Zurück-Taste wird nichts für Sie gelöst. Sie haben immer noch das gleiche Problem, wenn der Benutzer beispielsweise einen Anruf erhält. Wenn ein Anruf eingeht, besteht für Ihre Aktivität ungefähr die gleiche Wahrscheinlichkeit, dass sie getötet wird, bevor sie eine zuverlässige Antwort vom Netzwerk erhält.

Aus diesem Grund sollten Sie einen Dienst in einem eigenen Thread auf die Antwort aus dem Netzwerk warten lassen und ihn dann erneut versuchen lassen, wenn dies nicht erfolgreich ist. Es ist nicht nur viel weniger wahrscheinlich, dass der Android-Dienst getötet wird, bevor er eine Antwort erhält, sondern sollte er vor Beendigung des Auftrags wirklich getötet werden, kann er von AlarmManager jederzeit wiederbelebt werden, um es erneut zu versuchen.

Stephan Branczyk
quelle
8

Überschreiben Sie einfach die onBackPressed () -Methode und Sie müssen nicht die Superklasse der onBackPressed-Methode oder andere aufrufen.

@Override
public void onBackPressed()
{

}

Oder übergeben Sie Ihre aktuelle Aktivität an die onBackPressed () -Methode.

@Override
public void onBackPressed()
{
   startActivity(new Intent(this, myActivity.class));  
   finish();
}

Ersetzen Sie den gewünschten Aktivitätsnamen durch myActivity.

Wenn Sie ein Fragment verwenden, rufen Sie zunächst die Methode callParentMethod () auf

public void callParentMethod(){
    context.onBackPressed(); // instead of context use getActivity or something related
}

Rufen Sie dann die leere Methode auf

@Override
public void onBackPressed()
{

}
Zakaria Hossain
quelle
6

wenn Sie verwenden FragmentActivity. dann mach das so

Rufen Sie dies zuerst in Ihrem Fragment.

public void callParentMethod(){
    getActivity().onBackPressed();
}

und dann Call- onBackPressedMethode neben Ihrer übergeordneten FragmentActivityKlasse.

@Override
public void onBackPressed() {
  //super.onBackPressed();
  //create a dialog to ask yes no question whether or not the user wants to exit
  ...
}
Hash
quelle
5

Verwenden Sie einfach diesen Code: Wenn Sie das Zurückdrücken deaktivieren möchten, verwenden Sie nicht super.OnBackPressed ();

@Override
public void onBackPressed() {

}
Seda T.
quelle
4

Wenn Sie Ihre App beim Abmelden deaktivieren möchten, können Sie ein nicht stornierbares Dialogfeld öffnen.

Ted Hopp
quelle
4

Sie können die onBackPressed()Methode in Ihrer Aktivität überschreiben und den Aufruf der Superklasse entfernen.

@Override
public void onBackPressed() {
  //remove call to the super class
  //super.onBackPressed();
}
Aman Agarwal
quelle
3

Sie müssen nur die Methode für die Schaltfläche "Zurück" überschreiben. Sie können die Methode leer lassen, wenn Sie möchten, damit beim Drücken der Zurück-Taste nichts passiert. Bitte schauen Sie sich den folgenden Code an:

@Override
public void onBackPressed() 
{
   // Your Code Here. Leave empty if you want nothing to happen on back press.
}
Hammad Khan
quelle
3

Abgesehen von diesen beiden Methoden aus der obigen Antwort.

onBackPressed () (API Level 5, Android 2.0)

onKeyDown () (API Level 1, Android 1.0)

Sie können auch dispatchKeyEvent()(API Level 1, Android 1.0) wie folgt überschreiben :

dispatchKeyEvent() (API Level 1, Android 1.0)

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    // TODO Auto-generated method stub
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        return true;
    }
    return super.dispatchKeyEvent(event);
}
Kris Roofe
quelle
3

Deaktivieren Sie den hinteren Button in Android

@Override
public void onBackPressed() {
    return;
}
Mahesh Bokhani
quelle
2

Für mich hat das Überschreiben onBackPressed()nicht funktioniert, aber das explizite Angeben, mit welcher Aktivität es beginnen soll, hat gut funktioniert:

@Override
public void onBackPressed(){
  Intent intent = new Intent(this, ActivityYouWanToGoBack.class);
  startActivity(intent);
}
Cheeroke
quelle
1

Versuche dies:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
 if (keyCode == KeyEvent.KEYCODE_BACK) {

   return true;
 }
   return super.onKeyDown(keyCode, event);    
}
mohamad sheikhi
quelle
1

super.onBackPressed()von der public void onBackPressed()Arbeit entfernen großartig. Es ist in Android 9 getestet

Golil
quelle