Android'de geri düğmesini devre dışı bırak


334

Uygulamadan çıkış yaparken android'de geri düğmesini nasıl devre dışı bırakabilirim?


1
Soru hakkında biraz daha açık olabilir misiniz? Geri düğmesinin varsayılan davranışının üzerine yazmak istiyorsanız, bu soruya buradan bakın. stackoverflow.com/questions/2000102/…
Gopinath

26
İyi bir nedeniniz yoksa lütfen bunu yapmayın, çünkü beklenen çalışma modelini kırmak tüm platformu çok az acıtır
Hamy

14
Arka düğmenin dokunmaya duyarlı (fiziksel değil) olduğu, aptal bir Samsung S4 ile, telefonun hemen kenarında, yan tarafa yaslanan bir avuç içi zaten dokunacak kadar hassas olan aptal bir Samsung S4 ile uğraşmanız gerekiyorsa bunu yapmak istersiniz. geri dön.
garlicman

1
Bu karşı Android Kalite ve Tasarım rehber , rol UX-N1.
MiguelSlv

Yanıtlar:


651

OnBackPressed yöntemini geçersiz kılın ve cihazdaki geri düğmesini işlemek istiyorsanız hiçbir şey yapmayın.

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}

12
Bu, anahtar yönetim yöntemlerini geçersiz kılmaktan çok daha iyi ve temizdir ve aynı etkiye sahiptir. Mükemmel cevap!
Nik Reiman

2
Harika bir çözüm ahbap. Ana sayfa düğmesi ile bunu yapmanın bir yolu var mı?
Datta Kunde

1
Bu harika! Aslında başka bir aktiviteden geri döndüğümde ana faaliyetime geri dönmek istedim ve bu yöntemi geçersiz kılmak bunu çok kolay yapmama izin veriyor.
Jim

Hata! Super.onBackPressed () 'i kaldırmayı unutuyorum.
Aristo Michael

173

Daha yüksek bir api seviyesi 2.0 ve üstü arıyorsanız bu harika çalışır

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

1.6'ya kadar android api seviyesi arıyorsanız.

@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);    
}

Geri düğmesine basılmasını önlemek için Aktivitenize yukarıdaki kodu yazın


5
Bu yöntem, onbackpressed'in api seviyesi gereksinimi nedeniyle onbackpressed kullanmaktan daha geriye dönük olarak uyumludur
AndrewPK

5
Mükemmel cevap. Projem için buna ihtiyacım olmasa da, hem eski hem de yeni yöntemleri sağladığınızı takdir ediyorum. Bu doğru cevap olarak işaretlenmelidir. +1
Jim

1
@Javanator ikincisi benim için işe yaramaz (örneğin API seviyesi 16 için), ancak birincisi bir cazibe gibi çalışır
noloman

38

Bu basit şekilde yapabilirsiniz super.onBackPressed () öğesini çağırma

Not: - Bunu yapmak için güçlü bir nedeniniz olmadığı sürece ve bunu yapmayın.

@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}

6
"Neden olmasın" ile ilgili bir açıklama iyi olurdu. Teşekkürler.
neredeyse bir acemi

Süper çağırmamak önemlidir!
koştu

3
@almostabeginner çünkü super çağrılmaması, geri düğmesinin normal kullanımını geçersiz kılacaktır. normal çalışan bir düğme çalışmayı durdurduğunda kullanıcılar çıldırır. Onlar app buggy veya telefon vb. arıza olduğunu düşünebilirsiniz app sonunda suçlu olacak.
bengongon97

23

Basitçe onBackPressed () yöntemini geçersiz kılın .

@Override
public void onBackPressed() { }

13

Onu kullanıyorum.............

 @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..............
}

9

Faaliyetiniz öldürülmeden önce android istemci uygulamanızın bazı sunucudan çıkış yaptığından emin olmak istiyorsanız -> kendi iş parçacığında bir hizmetle çıkış yapın (yine de yapmanız gereken şey budur).

Geri düğmesini devre dışı bırakmak sizin için hiçbir şeyi çözmez. Kullanıcı bir telefon çağrısı aldığında da aynı sorunu yaşarsınız. Bir telefon çağrısı alındığında, etkinliğiniz ağdan güvenilir bir yanıt almadan önce öldürülme şansına sahiptir.

Bu nedenle, bir hizmetin ağdan gelen yanıt için kendi iş parçacığını beklemesine ve ardından başarılı olmazsa yeniden denemesine izin vermelisiniz. Android hizmeti sadece bir cevap almadan önce öldürülme olasılığı daha az değil, aynı zamanda işi bitirmeden önce gerçekten öldürülürse, AlarmManager tarafından tekrar denemek için her zaman canlandırılabilir.


8

Sadece onBackPressed () yöntemini geçersiz kılın ve onBackPressed yönteminin veya başkalarının süper sınıfını çağırmanıza gerek yok.

@Override
public void onBackPressed()
{

}

Veya geçerli etkinliğinizi onBackPressed () yöntemine aktarın.

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

Etkinlik adınızı myActivity olarak değiştirin.

fragman kullanıyorsanız, her şeyden önce callParentMethod () yöntemini çağırın

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

sonra boş yöntemi çağırın

@Override
public void onBackPressed()
{

}

6

kullanıyorsanız FragmentActivity. o zaman böyle yap

ilk ara Bu senin içinde Fragment.

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

ve sonra onBackPressedüst FragmentActivitysınıfınızın yan tarafındaki Call yöntemini

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

5

Sadece bu kodu kullanarak: Backpressed devre dışı bırakmak istiyorsanız, super.OnBackPressed ();

@Override
public void onBackPressed() {

}

4

Oturumu kapatırken uygulamanızı devre dışı bırakmak istiyorsanız, iptal edilemez bir iletişim kutusu açabilirsiniz.


4

onBackPressed()Etkinliğinizdeki yöntemi geçersiz kılabilir ve süper sınıfa yapılan çağrıyı kaldırabilirsiniz.

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

3

Sadece geri düğmesi yöntemini geçersiz kılmanız gerekir. Geri düğmesine bastığınızda hiçbir şey olmayacak şekilde yöntemi boş bırakabilirsiniz. Lütfen aşağıdaki koda bir göz atın:

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

3

Bunun dışında yukarıdaki iki yöntem de bu cevabı içermektedir.

onBackPressed () (API Seviye 5, Android 2.0)

onKeyDown () (API Seviye 1, Android 1.0)

Ayrıca dispatchKeyEvent()(API Seviye 1, Android 1.0) şu şekilde geçersiz kılabilirsiniz ,

dispatchKeyEvent() (API Seviye 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);
}

3

Android'de geri buttton'u devre dışı bırak

@Override
public void onBackPressed() {
    return;
}

2

Benim için sadece geçersiz kılma onBackPressed()işe yaramadı ama hangi aktivitenin iyi çalışmaya başlaması gerektiğini açıkça belirtti:

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

1

Bunu dene:

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

   return true;
 }
   return super.onKeyDown(keyCode, event);    
}

1

kaldırmak super.onBackPressed()dan public void onBackPressed()çalışan harika. android 9 test edilmiştir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.