Ketika tombol BACK ditekan pada ponsel, saya ingin mencegah aktivitas tertentu kembali ke yang sebelumnya.
Secara khusus, saya memiliki layar masuk dan pendaftaran, keduanya memulai aktivitas baru yang disebut HomeScreen
saat masuk / pendaftaran berhasil. Setelah HomeScreen dimulai, saya ingin mencegah pengguna untuk dapat kembali ke login atau mendaftar layar dengan menekan tombol BACK.
Saya mencoba menggunakan Intent.FLAG_ACTIVITY_NO_HISTORY
, tetapi karena aplikasi memiliki integrasi Facebook, ketika 'Login dengan Facebook' digunakan, Facebook harus kembali ke layar login awal, oleh karena itu saya harus menyimpan riwayat kegiatan ini.
Saya berpikir untuk mengesampingkan perilaku tombol BACK pada HomeScreen
untuk langsung menyelesaikan aplikasi ketika tombol ditekan dan saya gunakan
@Override
public void onBackPressed() {
finish();
}
tapi itu juga tidak berhasil.
Jawaban:
Saran saya adalah untuk menyelesaikan aktivitas yang Anda tidak ingin kembali ke pengguna. Misalnya, dalam aktivitas masuk Anda, tepat setelah Anda menelepon
startActivity
, panggilfinish()
. Ketika pengguna menekan tombol kembali, mereka tidak akan dapat pergi ke aktivitas masuk karena telah dimatikan dari tumpukan.sumber
finish
selama transisi bersama, Anda mungkin mengalami pendarahan dari aktivitas sebelumnya. misalnya, jika Anda memilikiHomeActivity
->IntermediateActivity
->FinalActivity
, dan Anda meneleponfinish()
diIntermediateActivity
segera setelah memulaiFinalActivity
Anda akan melihatHomeActivity
untuk sesaat.Solusi berikut dapat sangat berguna dalam skenario login / aktivitas utama biasa atau menerapkan layar pemblokiran.
Untuk meminimalkan aplikasi daripada kembali ke aktivitas sebelumnya, Anda dapat mengganti
onBackPressed()
seperti ini:moveTaskToBack(boolean nonRoot)
meninggalkan tumpukan belakang Anda apa adanya, hanya menempatkan tugas Anda (semua aktivitas) di latar belakang. Sama seperti jika pengguna menekan tombol Home .Parameter
boolean nonRoot
- Jika salah maka ini hanya berfungsi jika aktivitas adalah akar dari tugas; jika benar itu akan berfungsi untuk aktivitas apa pun dalam tugas.sumber
Saya tidak yakin persis apa yang Anda inginkan, tetapi sepertinya itu mungkin, dan sepertinya Anda sudah berada di jalur yang benar.
Berikut beberapa tautan yang mungkin membantu:
Nonaktifkan tombol kembali di android
Bagaimana saya bisa menonaktifkan 'kembali' ke beberapa aktivitas?
sumber
System.exit(0)
disebut (Saya tahu itu bukan praktik terbaik, tapi saya hanya ingin memberi contoh).Ada dua solusi untuk kasus Anda, aktivitas A memulai aktivitas B, tetapi Anda tidak ingin kembali ke aktivitas A dalam aktivitas B.
1. Aktivitas A yang dihapus sebelumnya dari tumpukan belakang.
2. Dinonaktifkan kembali tombol aksi dalam aktivitas B.
Ada dua cara untuk mencegah acara kembali seperti di bawah ini,
1) Merekomendasikan pendekatan
2) Ganti metode onKeyDown
Semoga bermanfaat, tapi tetap tergantung situasi Anda.
sumber
finish()
. Dipertimbangkan dengannohistory
atribut yang tidak perlu , bendera maksud, tag manifes aktivitas induk, dll! Konyol, terima kasih atas jawabannya!Karena sudah ada banyak solusi hebat yang disarankan, saya akan mencoba memberikan penjelasan yang lebih cerdik.
Hapus Aktivitas sebelumnya dari Backstack. Sederhana
finish()
Metode panggilanAliran Normal:
Semua aktivitas disimpan dalam tumpukan yang dikenal sebagai Backstack.
Ketika Anda memulai Kegiatan baru (
startActivity(...)
) maka Kegiatan baru didorong ke atas tumpukan dan ketika Anda menekan tombol kembali Kegiatan dikeluarkan dari tumpukan.Satu poin kunci yang perlu diperhatikan adalah bahwa ketika tombol kembali ditekan maka
finish();
metode disebut secara internal. Ini adalah perilaku default metode onBackPressed ().Jadi, jika Anda ingin melewati Aktivitas B?
Cukup tambahkan
finish();
metode setelah AndastartActvity(...)
dalam Aktivitas Bsumber
finish()
memberi Anda metode untuk menutup Aktivitas saat ini, bukan seluruh aplikasi. Dan sebaiknya Anda tidak mencoba mencari metode untuk mematikan aplikasi. Sedikit saran.Sudahkah Anda mencoba kata penghubung
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY
? Ingatlah untuk menggunakan bendera ini dalamIntent
memulai aktivitas!sumber
FLAG_ACTIVITY_NO_HISTORY
mencegah LoginScreen saya untuk menangkap panggilan balik Facebook ketika Login dengan Facebook digunakan. Karena begitu fokus keluar dari LoginScreen tidak dapat dilanjutkan (karena tidak ada riwayat). Tapi saya belum mencobanyaIntent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
, saya akan memeriksanya, terima kasih!finish()
metode ini, saya tidak tahu tentang itu.Taruh
finish()
setelahsumber
Jawaban paulsm4 adalah yang benar. Jika
onBackPressed()
Anda hanya kembali, itu akan menonaktifkan tombol kembali. Namun, saya pikir pendekatan yang lebih baik mengingat kasus penggunaan Anda adalah membalikkan logika aktivitas, yaitu menjadikan aktivitas rumah Anda yang utama, periksa apakah pengguna masuk di sana, jika tidak, mulai aktivitas masuk. Alasannya adalah bahwa jika Anda mengganti tombol kembali dalam aktivitas utama Anda, sebagian besar pengguna akan bingung ketika mereka menekan kembali dan aplikasi Anda tidak melakukan apa pun.sumber
Jika Anda tidak ingin kembali ke semua aktivitas pada aplikasi Anda, Anda dapat menggunakannya
Pelajari lebih lanjut di sini: http://developer.android.com/guide/topics/manifest/activity-element.html
sumber
Metode ini berfungsi dengan baik
sumber
Cukup timpa metode onKeyDown dan periksa apakah tombol kembali ditekan.
sumber
Ketika Anda membuat
onBackPressed()
cukup hapussuper.onBackPressed();
dan itu akan berhasilsumber
Taruh
segera setelah ActivityStart untuk menghentikan aktivitas mencegah cara kembali ke sana. Lalu tambahkan
ke aktivitas yang Anda mulai.
sumber