Saya perhatikan pola ini di banyak aplikasi dan game Android baru-baru ini: ketika mengklik tombol kembali untuk "keluar" dari aplikasi, Toast
muncul dengan pesan yang mirip dengan "Silakan klik KEMBALI lagi untuk keluar".
Saya bertanya-tanya, seperti yang sering saya lihat, apakah itu fitur bawaan yang entah bagaimana dapat Anda akses dalam suatu kegiatan? Saya telah melihat kode sumber dari banyak kelas tetapi sepertinya saya tidak dapat menemukan apa pun tentang itu.
Tentu saja, saya dapat memikirkan beberapa cara untuk mencapai fungsi yang sama dengan cukup mudah (yang paling mudah adalah dengan menyimpan boolean dalam aktivitas yang menunjukkan apakah pengguna sudah mengklik sekali ...) tapi saya bertanya-tanya apakah ada sesuatu yang sudah ada di sini .
EDIT : Seperti @LAS_VEGAS sebutkan, saya tidak benar-benar bermaksud "keluar" dalam arti tradisional. (mis. diakhiri) Maksud saya "kembali ke apa pun yang terbuka sebelum aktivitas awal aplikasi diluncurkan", jika itu masuk akal :)
sumber
Jawaban:
Saya pikir penangan ini membantu mengatur ulang variabel setelah 2 detik.
sumber
Sudheesh B Nair
untuk mencakup komentar yang disarankan di atas.Sudheesh B Nair memiliki jawaban yang bagus (dan dapat diterima) pada pertanyaan, yang menurut saya harus memiliki alternatif yang lebih baik seperti;
Apa yang salah dengan mengukur waktu berlalu dan memeriksa apakah
TIME_INTERVAL
milidetik (katakanlah 2000) berlalu sejak pers terakhir terakhir. Kode contoh berikut digunakanSystem.currentTimeMillis();
untuk menyimpan waktuonBackPressed()
disebut;Kembali pada kritik jawaban yang diterima ; Menggunakan
flag
untuk menunjukkan jika ditekan di terakhirTIME_INTERVAL
(mengatakan 2000) milidetik dan set - ulang adalah melaluiHandler
'spostDelayed()
metode adalah hal pertama yang datang dalam pikiran saya. TetapipostDelayed()
tindakan harus dibatalkan ketika aktivitas ditutup, menghapusRunnable
.Untuk menghapusnya
Runnable
, itu tidak boleh dinyatakan anonim , dan dinyatakan sebagai anggota bersama denganHandler
aswell. KemudianremoveCallbacks()
metodeHandler
dapat disebut dengan tepat.Contoh berikut adalah demonstrasi;
Terima kasih kepada @NSouth karena berkontribusi; Untuk mencegah pesan roti muncul bahkan setelah aplikasi ditutup,
Toast
dapat dinyatakan sebagai anggota - katakanmExitToast
- dan dapat dibatalkan viamExitToast.cancel();
sebelumsuper.onBackPressed();
panggilan.sumber
Hanya berpikir saya akan membagikan bagaimana saya melakukannya pada akhirnya, saya hanya menambahkan dalam aktivitas saya:
Dan itu berfungsi persis seperti yang saya inginkan. Termasuk pengaturan ulang keadaan kapan pun aktivitas dilanjutkan.
sumber
Back
sekali dan kemudian tekanBack
lagi satu menit kemudian dan aplikasi akan keluar. Ini bukan perilaku yang diharapkan pengguna.Diagram Alir Proses:
Kode Java:
sumber
Ada cara yang paling sederhana di antara semua jawaban ini.
Cukup tulis kode berikut di dalam
onBackPressed()
metode.Anda perlu mendefinisikan
back_pressed
objek sepertilong
dalam aktivitas.sumber
Solusi saya menggunakan snackbar:
Sederhana dan bergaya.
sumber
Berdasarkan jawaban dan saran yang benar dalam komentar, saya telah membuat demo yang berfungsi dengan sangat baik dan menghapus panggilan balik handler setelah digunakan.
MainActivity.java
Saya harap ini akan membantu !!
sumber
onBackPressed()
memperbaiki masalah kebocoran memori ?Deklarasikan Variabel
private boolean doubleBackToExitPressedOnce = false;
sumber
Ini bukan ide yang baik untuk menggunakan Runnable ketika keluar dari aplikasi, saya baru-baru ini mencari cara yang lebih sederhana untuk merekam dan membandingkan periode antara dua klik tombol KEMBALI. Contoh kode sebagai berikut:
Ini akan melakukan trik untuk keluar dari aplikasi dengan mengklik dua kali tombol KEMBALI dalam periode penundaan tertentu yaitu 2000 milidetik dalam sampel.
sumber
Jawaban yang diterima adalah yang Terbaik tetapi jika Anda menggunakan
Android Design Support Library
maka Anda dapat menggunakanSnackBar
untuk Tampilan yang Lebih Baik.sumber
Ini bukan fungsi bawaan. Saya pikir itu bahkan bukan perilaku yang direkomendasikan. Aplikasi Android tidak dimaksudkan untuk keluar:
Mengapa aplikasi Android tidak menyediakan opsi "Keluar"?
sumber
Akhirnya buat onBackPressedMethod sebagai Follows:
Ini berfungsi dengan benar, saya telah menguji. dan saya pikir ini jauh lebih sederhana.
sumber
Jawaban Zefnus menggunakan System.currentTimeMillis () adalah yang terbaik (+1). Cara saya melakukannya bukan lebih baik dari itu, tetapi masih mempostingnya untuk menambah ide-ide di atas.
Jika roti panggang tidak terlihat ketika tombol kembali ditekan, roti panggang ditampilkan, sedangkan, jika roti itu terlihat (punggung sudah ditekan sekali dalam
Toast.LENGTH_SHORT
waktu terakhir ), maka roti itu keluar.sumber
Baru-baru ini, saya perlu menerapkan fitur tombol kembali ini di aplikasi saya. Jawaban atas pertanyaan awal itu berguna, tetapi saya harus mempertimbangkan dua hal lagi:
Berdasarkan jawaban dan komentar, saya membuat kode berikut:
Kode di atas mengasumsikan bahwa perpustakaan dukungan digunakan. Jika Anda menggunakan fragmen tetapi bukan pustaka dukungan, Anda ingin menggantinya
getSupportFragmentManager()
dengangetFragmentManager()
.Hapus yang pertama
if
, jika tombol kembali tidak pernah dibatalkan. Hapus yang keduaif
, jika Anda tidak menggunakan fragmen atau tumpukan kembali fragmenJuga, penting untuk menyadari bahwa metode
onBackPressed
ini didukung sejak Android 2.0. Periksa halaman ini untuk deskripsi yang lebih terperinci. Agar fitur back press berfungsi pada versi yang lebih lama, tambahkan metode berikut ke aktivitas Anda:sumber
Di jawa
Di kotlin
sumber
Saya tahu ini adalah pertanyaan yang sangat lama, tetapi ini adalah cara termudah untuk melakukan apa yang Anda inginkan.
Saya tahu ini bukan metode terbaik, tetapi berfungsi dengan baik!
sumber
Untuk tujuan ini saya telah menerapkan fungsi berikut:
sumber
Ini juga membantu ketika Anda memiliki aktivitas stack sebelumnya disimpan dalam stack.
Saya telah mengubah jawaban Sudheesh
sumber
sumber
Metode yang sedikit lebih baik daripada Zefnus . Panggil System.currentTimeMillis () hanya satu kali dan hilangkan
return;
:sumber
Ini adalah kode kerja lengkap. Dan juga jangan lupa untuk menghapus callback sehingga tidak menyebabkan kebocoran memori di aplikasi. :)
sumber
Di sini, saya telah menggeneralisasi menulis kode untuk jumlah N tap. Kode ini juga ditulis untuk opsi Aktifkan Pengembang di ponsel perangkat android. Bahkan Anda dapat menggunakan ini untuk mengaktifkan fitur saat pengembang menguji aplikasi.
Panggil askToExit () pada opsi backpress atau logout.
sumber
Saya menggunakan ini
gunakan untuk dalam acara
onBackPressed
atau
ExitApp.now(this,R.string.double_back_pressed)
untuk mengubah detik, perlu untuk milidetik yang tertutup dan ditentukan
ExitApp.now(this,R.string.double_back_pressed,5000)
sumber
Ketika HomeActivity berisi laci navigasi dan fungsi ganda ditekan () untuk keluar dari aplikasi. (Jangan lupa menginisiasi variabel global boolean doubleBackToExitPressedOnce = false;) penangan baru setelah 2 detik mengatur variabel doubleBackPressedOnce menjadi false
sumber
sumber
Beberapa Perbaikan dalam jawaban Sudheesh B Nair, saya perhatikan itu akan menunggu penangan bahkan sambil menekan kembali dua kali segera, jadi batalkan penangan seperti yang ditunjukkan di bawah ini. Saya telah membatalkan toast untuk mencegahnya muncul setelah aplikasi keluar.
sumber
Ini sama dengan respons yang diterima dan paling banyak dipilih tetapi ini menggunakan Snackbar bukan Toast.
sumber
Dalam kasus saya, saya bergantung pada yang
Snackbar#isShown()
lebih baikUX
.sumber
Untuk aktivitas yang memiliki Navigasi Laci , Gunakan kode berikut untuk OnBackPressed ()
sumber
Ini cara lain ... menggunakan metode CountDownTimer
sumber