Ketika saya mengklik tombol Logout di Aktivitas Profil saya, saya ingin mengarahkan pengguna ke halaman Login , di mana dia perlu menggunakan kredensial baru.
Karenanya saya menggunakan kode ini:
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
di bagian onButtonClick
tombol Logout.
Tetapi masalahnya adalah ketika saya mengklik tombol kembali perangkat pada Aktivitas Login, saya akan dibawa ke ProfileActivity. Saya mengharapkan aplikasi harus ditutup ketika saya menekan tombol kembali perangkat di LoginActivity.
Apa yang saya lakukan salah?
Saya juga menambahkan android:launchMode="singleTop"
dalam manifes untuk LoginActivity saya
Terima kasih
android
back-stack
Archie.bpgc
sumber
sumber
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Saya mendapat jawaban dari pertanyaan ini: stackoverflow.com/questions/3473168/…Jawaban:
Solusi yang diusulkan di sini berhasil untuk saya:
Jawa
Kotlin
Namun, ini membutuhkan API level> = 11.
sumber
FLAG_ACTIVITY_CLEAR_TASK
. Ini adalah cara resmi untuk mendapatkannya. Tidak perlu mengubah semua aktivitas di aplikasi.Berikut ini salah satu solusi untuk menghapus semua aktivitas aplikasi Anda saat Anda menggunakan tombol logout.
Setiap kali Anda memulai sebuah Aktivitas, mulailah seperti ini:
Saat Anda ingin menutup seluruh aplikasi, lakukan ini:
RESULT_CLOSE_ALL adalah variabel global terakhir dengan bilangan bulat unik untuk memberi sinyal bahwa Anda ingin menutup semua aktivitas.
Kemudian tentukan
onActivityResult(...)
callback setiap aktivitas sehingga ketika aktivitas kembali dengan nilai RESULT_CLOSE_ALL, itu juga memanggilfinish()
:Ini akan menyebabkan efek kaskade yang menutup semua aktivitas Anda.
Namun ini adalah hack dan digunakan
startActivityForResult
dengan cara yang tidak dirancang untuk digunakan.Mungkin cara yang lebih baik untuk melakukan ini adalah menggunakan penerima siaran seperti yang ditunjukkan di sini:
Saat keluar, hapus tumpukan Riwayat aktivitas, mencegah tombol "kembali" dari membuka Aktivitas khusus masuk
Lihat utas ini untuk metode lain juga:
Android: Hapus tumpukan belakang
Selesaikan semua aktivitas sebelumnya
sumber
Untuk menghapus tumpukan aktivitas sepenuhnya, Anda ingin membuat tumpukan tugas baru menggunakan TaskStackBuilder, misalnya:
Ini tidak hanya akan membuat tumpukan tugas baru dan bersih, ini juga akan memungkinkan berfungsinya tombol "naik" jika LoginActivity Anda memiliki aktivitas induk.
sumber
FLAG_ACTIVITY_NEW_TASK
ataufinishAffinity()
tidak berhasil untuk saya. Hanya jawaban ini yang menyelesaikan tujuannya.finishAffinity()
ditambahkan di API 16. GunakanActivityCompat.finishAffinity()
di versi sebelumnya. Kapan Anda akan meluncurkan aktivitas apa pun menggunakan maksud dan menyelesaikan aktivitas saat ini. Sekarang gunakanActivityCompat.finishAffinity()
sajafinish()
. itu akan menyelesaikan semua aktivitas bertumpuk di bawah aktivitas saat ini. Ini bekerja dengan baik untuk saya.sumber
ActivityCompat.finishAffinity()
finishAffinity()
juga menyelesaikan aktivitas saat ini dengan semua aktivitas yang ada di back-stack dari afinitas yang sama.Apa yang berhasil untuk saya
sumber
Salah satu solusi yang mungkin saya sarankan untuk Anda adalah menambahkan
android:launchMode="singleTop"
manifes untuk ProfileActivity saya . dan ketika log out diklik Anda dapat logoff mulai lagi Anda LoginActivity. saat logout, Anda dapat menyebutnya.sumber
Untuk API 11+ Anda dapat menggunakan
Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
seperti ini:Itu benar-benar akan menghapus semua aktivitas sebelumnya dan memulai aktivitas baru.
sumber
Anda dapat mencoba
finishAffinity()
, itu menutup semua aktivitas saat ini dan bekerja pada dan di atas Android 4.1sumber
Saya juga menghadapi masalah yang sama ..
dalam aktivitas login yang saya lakukan adalah.
saat keluar
Ini berfungsi dengan baik tetapi ketika saya berada di ActivityLoggedIn dan saya meminimalkan aplikasi dan mengklik ikon tombol peluncur di laci aplikasi, MainActivity dimulai lagi: - / saya menggunakan bendera
untuk MainActivity.
sumber
Gunakan yang berikut ini untuk
activity
hapus tanda CLEAR_TASK untuk penggunaan fragmen.
Saya harap ini mungkin berguna bagi sebagian orang.
sumber
Simpan saja
sumber
Tidak ada satu pun dari flag maksud yang berfungsi untuk saya, tetapi beginilah cara saya memperbaikinya:
Ketika pengguna keluar dari satu aktivitas, saya harus menyiarkan pesan dari aktivitas itu, lalu menerimanya dalam aktivitas yang ingin saya tutup, setelah itu saya sebut finish (); dan itu bekerja dengan cukup baik.
sumber
Coba ini akan berhasil:
sumber
Di API level 11 atau lebih tinggi, gunakan
FLAG_ACTIVITY_CLEAR_TASK
danFLAG_ACTIVITY_NEW_TASK
tandai di Intent untuk menghapus semua tumpukan aktivitas.sumber
Gunakan ini
sumber
tambahkan ke Manifest untuk aktivitas Anda
android:launchMode="singleTask"
sumber
Kotlin yang Canggih dan Dapat Digunakan Kembali:
Anda dapat menyetel bendera secara langsung menggunakan metode penyetel. Di Kotlin
or
adalah pengganti Java bitwise atau|
.Jika Anda berencana untuk menggunakannya secara teratur, buat fungsi ekstensi Intent
Anda kemudian bisa langsung memanggil fungsi ini sebelum memulai maksud
Jika Anda memerlukan opsi untuk menambahkan tanda tambahan dalam situasi lain, tambahkan parameter opsional ke fungsi ekstensi.
sumber