Di Android saya punya beberapa aktivitas, misalkan A, B, C.
Di A, saya menggunakan kode ini untuk membuka B:
Intent intent = new Intent(this, B.class);
startActivity(intent);
Di B, saya menggunakan kode ini untuk membuka C:
Intent intent = new Intent(this, C.class);
startActivity(intent);
Ketika pengguna mengetuk tombol di C, saya ingin kembali ke A dan menghapus tumpukan kembali (tutup B dan C). Jadi ketika pengguna menggunakan tombol kembali B dan C tidak akan muncul, saya sudah mencoba yang berikut:
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Tetapi B dan C masih muncul jika saya menggunakan tombol kembali ketika saya kembali beraktivitas A. Bagaimana saya bisa menghindari ini?
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
sumber
CLEAR_TOP
bendera - kombinasi ini adalah HANYA yang sepenuhnya membersihkan seluruh tumpukan dan menjadikan aktivitas baru satu-satunya di aplikasi. Terima kasih!Bagaimana dengan menambahkan file manifes untuk aktivitas terkait:
ke definisi aktivitas B dan C? Mereka tidak akan ditambahkan ke backstack. Tidak yakin apakah itu yang Anda inginkan.
sumber
Ini mengganggu saya untuk waktu yang lama. Akhirnya saya mengatasinya dengan melakukan ini:
Dalam fragmen, gunakan:
Di Aktivitas, gunakan (tambahkan satu bendera maksud lebih banyak
Intent.FLAG_ACTIVITY_CLEAR_TASK
dibandingkan dengan fragmen):sumber
android:launchMode="singleTop"
ke elemen aktivitas di manifes Anda untuk Aktivitas Aintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
danintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
ketika memulai Aktivitas AIni berarti bahwa ketika Kegiatan A diluncurkan, semua tugas di atasnya dibersihkan sehingga A berada di atas. Back stack baru dibuat dengan A di root, dan menggunakan
singleTop
memastikan Anda hanya pernah meluncurkan A sekali (karena A sekarang di atas karena..._CLEAR_TOP
).sumber
Mulai di API 16 (Jelly Bean), Anda bisa menelepon
finishAffinity()
.Sekarang Anda juga bisa menelepon
ActivityCompat.finishAffinity(Activity activity)
dengan perpustakaan kompatibilitas.Pastikan untuk menetapkan taskAffinity di manifes ke nama paket yang unik untuk grup aktivitas tersebut.
Lihat untuk info lebih lanjut:
http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#finishAffinity%28android.app.Activity%29
sumber
Coba gunakan
dan tidak
sumber
Jika aplikasi Anda memiliki minimum sdk versi 16 maka Anda dapat menggunakan finishAffinity ()
Selesaikan aktivitas ini dan juga semua aktivitas tepat di bawahnya dalam tugas saat ini yang memiliki afinitas yang sama.
Ini berfungsi untuk saya. Di layar Pembayaran Top, hapus semua aktivitas back-stack,
http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29
sumber
Sesuai Wakka dalam Menghapus aktivitas dari tumpukan riwayat ...
Tambahkan
android:noHistory="true"
atribut ke Anda<activity>
diAndroidManifest.xml
seperti ini:sumber
Untuk penelitian selanjutnya, coba kode ini.
sumber
Gunakan finishAffinity (); dalam tugas C saat memulai tugas A untuk menghapus aktivitas backstack.
sumber
Gunakan kode ini untuk memulai Kegiatan baru dan tutup atau hancurkan semua tumpukan atau tumpukan aktivitas lainnya.
sumber
sumber
Saya menemukan solusi menarik yang mungkin bisa membantu. Saya melakukan ini dalam
onBackPressed()
metode saya .FinishAffinity
menghapus koneksi aktivitas yang ada ke tumpukannya. Dan kemudian selesai membantu Anda keluar dari aktivitas itu. Yang pada akhirnya akan keluar dari aplikasi.sumber
Saya menemukan jawabannya di sini agak menyesatkan karena kode dalam pertanyaan awal tampaknya berfungsi dengan baik untuk saya?
Dengan A sebagai aktivitas root, memulainya dari B atau C hanya dengan FLAG_ACTIVITY_CLEAR_TOP menghapus B dan C dari tumpukan belakang.
sumber
Di kotlin hampir sama dengan java. Hanya | simbol diganti oleh atau teks. Jadi, ada tertulis seperti-
sumber
Saya mencoba semua solusi dan tidak ada yang bekerja secara individual untuk saya. Solusi saya adalah:
Nyatakan
Activity A
sebagaiSingleTop
dengan menggunakan[android:launchMode="singleTop"]
manifes Android.Sekarang tambahkan flag berikut saat meluncurkan
A
dari mana saja. Ini akan menghapus tumpukan.sumber
Intent.FLAG_ACTIVITY_CLEAR_TOP
tidak akan berfungsi dalam kasus ini. Mohon gunakan(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
Untuk detail lebih lanjut silakan lihat dokumentasi ini .
sumber
Kedengarannya seperti Anda perlu mulai
Activity C
dariActivity B
dengan menggunakanstartActivityForResult()
. Ketika Anda mengklik tombol diActivity C
, panggilansetResult(RESULT_OK)
danfinish()
jadiActivity C
berakhir. DiActivity B
, Anda dapatonActivityResult()
membalasnya dengan memanggilnyafinish()
sendiri, dan Anda akan dibawa kembali ke sanaActivity A
.sumber
logout.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TASK); logout.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
sumber
Anda dapat menggunakan contoh ini untuk menelepon
Activity A
dari AndaActivity C
Intent loout = new Intent(context, LoginActivity.class); loout.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(loout);
sumber
bagi saya menambahkan
Intent.FLAG_ACTIVITY_CLEAR_TASK
memecahkan masalahsumber
Lanjutan, Kotlin yang Dapat Digunakan Kembali:
Anda dapat mengatur bendera secara langsung menggunakan metode penyetel. Di Kotlin
or
adalah pengganti untuk bitwise Java atau|
.Jika menggunakan ini lebih dari sekali, buat fungsi ekstensi Intent
Anda kemudian dapat langsung memanggil fungsi ini sebelum memulai niat
Jika Anda memerlukan opsi untuk menambahkan flag tambahan dalam situasi lain, tambahkan param opsional ke fungsi ekstensi.
sumber
Selain itu
FLAG_ACTIVITY_CLEAR_TOP
, Anda dapat mencoba menambahkanIntent.FLAG_ACTIVITY_SINGLE_TOP
juga:intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
sumber
Kode yang diberikan bekerja dengan benar. Saya telah mencoba sampel Aplikasi Life Cycle.
Saya tidak mendapatkan B dan C di tumpukan belakang setelah memulai aktivitas A dengan flag, FLAG_ACTIVITY_CLEAR_TOP
sumber
saya menelepon
activity_name.this.finish()
setelah memulai niat baru dan itu berhasil untuk saya.Tapi itu tidak akan bekerja untuk saya ... Saya tidak menyarankan solusi ini untuk digunakan tetapi jika pengaturan flag tidak akan bekerja untuk Anda daripada Anda dapat mencoba ini .. Tapi tetap saya sarankan jangan menggunakannya
sumber
Tambahkan NO History Tandai dalam maksudnya.
Di aktivitas B, mulailah aktivitas C seperti di bawah >>>>>>
sumber
Dalam manifes
dan
sumber
Tambahkan ini ke
Activity B
danActivity C
atau
Override
onBackPressed
fungsi untuk menghindari kembali menekan dengan areturn
.sumber
Gunakan metode setFlags () untuk membersihkan sisi belakang membuka semua aktivitas tutup dan mulai aktivitas Anda
sumber