Nonaktifkan tombol kembali di android

334

Bagaimana cara menonaktifkan tombol kembali di android saat keluar aplikasi?

Rahmat
sumber
1
Bisakah Anda sedikit lebih jelas tentang pertanyaan itu? Jika Anda mencari menimpa perilaku tombol kembali default maka rujuk pertanyaan ini di sini. stackoverflow.com/questions/2000102/…
Gopinath
26
Tolong jangan lakukan ini kecuali Anda memiliki alasan yang bagus, karena melanggar model operasi yang diharapkan akan sangat menyakitkan seluruh platform
Hamy
14
Anda ingin melakukannya jika Anda harus berurusan dengan Samsung S4 yang bodoh di mana tombol kembali sensitif terhadap sentuhan (bukan fisik), tepat di tepi ponsel, yang sudah sangat sensitif terhadap sentuhan sehingga telapak tangan yang bersandar pada sisi akan kembali.
garlicman
1
Ini bertentangan dengan panduan Kualitas dan Desain Android , peran UX-N1.
MiguelSlv

Jawaban:

651

Ganti metode onBackPressed dan jangan lakukan apa pun jika Anda bermaksud menangani tombol kembali pada perangkat.

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}
Gopinath
sumber
12
Ini jauh lebih baik dan lebih bersih daripada mengganti metode penanganan utama, dan memiliki efek yang sama. Jawaban bagus!
Nik Reiman
2
Bung solusi hebat. Apakah ada cara untuk melakukan ini dengan tombol home?
Datta Kunde
1
Ini bagus! Saya sebenarnya ingin selalu kembali ke aktivitas utama saya ketika menekan kembali dari aktivitas lain, dan mengesampingkan metode ini memungkinkan saya melakukannya dengan sangat mudah.
Jim
Ups, saya lupa menghapus super.onBackPressed ().
Aristo Michael
173

Jika mencari api level 2.0 yang lebih tinggi dan di atasnya, ini akan berhasil

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

Jika mencari tingkat api Android hingga 1.6.

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

Tulis kode di atas dalam Aktivitas Anda untuk mencegah tombol kembali ditekan

Javanator
sumber
5
Metode ini lebih kompatibel dibandingkan menggunakan onbackpressed karena persyaratan tingkat api
onbackpressed
5
Jawaban yang bagus Meskipun saya tidak membutuhkannya untuk proyek saya, saya menghargai Anda memberikan metode lama dan baru. Ini harus ditandai sebagai jawaban yang benar. +1
Jim
1
@Javanator yang kedua tidak akan bekerja untuk saya (untuk API level 16 misalnya), tetapi yang pertama bekerja seperti pesona
noloman
38

Anda dapat melakukan ini dengan cara sederhana Jangan panggil super.onBackPressed ()

Catatan: - Jangan lakukan ini kecuali dan sampai Anda memiliki alasan kuat untuk melakukannya.

@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}
Iman Marashi
sumber
6
Penjelasan tentang "mengapa tidak" akan bagus. Terima kasih.
hampir seorang pemula
Tidak memanggil .super itu penting!
Ran
3
@almostabeginner karena tidak memanggil super akan membatalkan penggunaan normal tombol kembali. pengguna akan panik ketika tombol yang berfungsi normal berhenti bekerja. mereka mungkin berpikir aplikasinya buggy atau telepon tidak berfungsi dll. aplikasi Anda pada akhirnya akan menjadi biang keladinya.
bengongon97
23

Cukup timpa metode onBackPressed () .

@Override
public void onBackPressed() { }
Pankaj kumar
sumber
13

Saya menggunakannya .............

 @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
sumber
9

Jika Anda ingin memastikan aplikasi klien android Anda logout dari beberapa server sebelum Aktivitas Anda terbunuh -> logout dengan layanan di utasnya sendiri (itulah yang seharusnya Anda lakukan).

Menonaktifkan tombol kembali tidak akan menyelesaikan apa pun untuk Anda. Anda masih akan memiliki masalah yang sama ketika pengguna menerima panggilan telepon misalnya. Ketika panggilan telepon diterima, aktivitas Anda memiliki peluang terbunuh sebelum mendapat jawaban yang andal dari jaringan.

Itu sebabnya Anda harus membiarkan layanan menunggu utasnya untuk jawaban dari jaringan, dan kemudian membuatnya mencoba lagi jika tidak berhasil. Layanan android tidak hanya jauh lebih kecil kemungkinannya untuk terbunuh sebelum mendapat jawaban kembali, tetapi jika benar-benar terbunuh sebelum menyelesaikan pekerjaan, itu selalu dapat dihidupkan kembali oleh AlarmManager untuk mencoba lagi.

Stephan Branczyk
sumber
8

Cukup timpa metode onBackPressed () dan tidak perlu memanggil kelas super metode onBackPressed atau yang lain ..

@Override
public void onBackPressed()
{

}

Atau meneruskan aktivitas Anda saat ini ke metode onBackPressed ().

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

Ganti nama aktivitas yang Anda butuhkan ke myActivity.

jika Anda menggunakan fragmen maka pertama-tama panggil metode callParentMethod ()

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

lalu panggil metode kosong

@Override
public void onBackPressed()
{

}
Zakaria Hossain
sumber
6

jika Anda menggunakan FragmentActivity. maka lakukan seperti ini

panggilan pertama Ini di dalam Anda Fragment.

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

lalu panggil onBackPressedmetode di samping FragmentActivitykelas indukmu .

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

Hanya menggunakan kode ini: Jika Anda ingin menonaktifkan backpressed, Anda tidak menggunakan super.OnBackPressed ();

@Override
public void onBackPressed() {

}
Seda T.
sumber
4

Jika Anda ingin menonaktifkan aplikasi saat keluar, Anda dapat memunculkan dialog yang tidak dapat dibatalkan.

Ted Hopp
sumber
4

Anda dapat mengganti onBackPressed()metode dalam aktivitas Anda dan menghapus panggilan ke kelas super.

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

Anda hanya perlu mengganti metode untuk tombol kembali. Anda dapat membiarkan metode ini kosong jika diinginkan sehingga tidak ada yang terjadi ketika Anda menekan tombol kembali. Silakan lihat kode di bawah ini:

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

Terlepas dari kedua metode ini dari jawaban di atas.

onBackPressed () (API Level 5, Android 2.0)

onKeyDown () (API Level 1, Android 1.0)

Anda juga dapat mengganti dispatchKeyEvent()(API Level 1, Android 1.0) seperti ini,

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
sumber
3

Nonaktifkan kembali tombol di android

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

Bagi saya hanya meng onBackPressed()- override tidak bekerja tetapi secara eksplisit menunjuk aktivitas mana yang harus mulai bekerja dengan baik:

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

Coba ini:

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

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

hapus super.onBackPressed()dari public void onBackPressed()pekerjaan yang bagus. diuji di Android 9

Golil
sumber