Saya ingin menyelesaikan satu aktivitas dari aktivitas lain, seperti:
Dalam Aktivitas [A], saat mengklik tombol, saya memanggil Aktivitas [B] tanpa menyelesaikan Aktivitas [A].
Sekarang di Activity [B], ada dua tombol, New dan Modify . Saat pengguna mengklik ubah, lalu keluarkan aktivitas [A] dari tumpukan dengan semua opsi dicentang ..
Tetapi ketika pengguna mengklik tombol Baru dari Aktivitas [B], maka saya harus menyelesaikan Aktivitas [A] dari tumpukan dan memuat ulang Aktivitas [A] itu lagi ke tumpukan.
Saya mencobanya, tetapi saya tidak dapat menyelesaikan Aktivitas [A] dari tumpukan ... Bagaimana cara melakukannya?
Saya menggunakan kode sebagai:
Dari Aktivitas [A]:
Intent GotoB = new Intent(A.this,B.class);
startActivityForResult(GotoB,1);
Metode lain dalam aktivitas yang sama
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 1)
{
if (resultCode == 1) {
Intent i = getIntent();
overridePendingTransition(0, 0);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(i);
}
}
}
Dan di Aktivitas [B], saat mengklik tombol:
setResult(1);
finish();
Jawaban:
Jadikan aktivitas A Anda dalam file manifes:
launchMode = "singleInstance"
Saat pengguna mengklik baru, lakukan
FirstActivity.fa.finish();
dan panggil Intent baru.Saat pengguna mengklik ubah, panggil Intent baru atau cukup selesaikan aktivitas B.
CARA PERTAMA
Dalam aktivitas pertama Anda, nyatakan yang
Activity object
seperti ini,sekarang gunakan objek itu di tempat lain
Activity
untuk menyelesaikan aktivitas pertama seperti ini,CARA KEDUA
Saat memanggil aktivitas
FirstActivity
Anda yang ingin Anda selesaikan segera setelah Anda melanjutkan, Anda dapat menambahkan bendera saat meneleponFirstActivity
Tetapi dengan menggunakan flag ini, aktivitas akan selesai meskipun Anda tidak menginginkannya. dan terkadang
onBack
jika Anda ingin menunjukkannya,FirstActivity
Anda harus memanggilnya menggunakan maksud.sumber
Itu bisa Anda lakukan, tetapi saya pikir Anda tidak boleh merusak aliran aktivitas normal. Jika Anda ingin menyelesaikan aktivitas Anda, maka Anda cukup mengirim siaran dari aktivitas B Anda ke aktivitas A.
Buat penerima siaran sebelum memulai aktivitas Anda B:
Kirim siaran dari aktivitas B ke aktivitas A bila Anda ingin menyelesaikan aktivitas A dari B
Saya harap ini akan berhasil untuk Anda ...
sumber
broadcast_receiver
denganunregisterReceiver()
Ini adalah pertanyaan komunikasi yang cukup standar. Salah satu pendekatannya adalah dengan menggunakan ResultReceiver di Aktivitas A:
lalu di Aktivitas B Anda bisa menyelesaikannya sesuai permintaan seperti:
Cobalah sesuatu seperti itu.
sumber
Ada satu pendekatan yang dapat Anda gunakan dalam kasus Anda.
Langkah 1: Mulai Aktivitas B dari Aktivitas A
Langkah2: Jika pengguna mengklik tombol ubah, mulai Aktivitas A menggunakan
FLAG_ACTIVITY_CLEAR_TOP
.Juga, teruskan bendera secara ekstra.Langkah3: Jika pengguna mengklik tombol Tambah, mulai Aktivitas A menggunakan
FLAG_ACTIVITY_CLEAR_TOP
.Juga, berikan bendera ekstra.FLAG_ACTIVITY_CLEAR_TOP
akan menghapus semua aktivitas yang dibuka hingga target dan memulai ulang jika tidak ada mode peluncuran yang ditentukan dalam aktivitas targetStep4: Sekarang
onCreate()
metode Aktivitas A, perlu mengambil bendera itu.sumber
Mulai aktivitas Anda dengan kode permintaan:
Dan Anda dapat menutupnya dari aktivitas lain seperti ini:
sumber
Lihat jawaban saya untuk pertanyaan Stack Overflow Selesaikan Semua aktivitas sebelumnya .
Yang Anda butuhkan adalah menambahkan
Intent.FLAG_CLEAR_TOP
. Bendera ini memastikan bahwa semua aktivitas di atas aktivitas yang ditargetkan dalam tumpukan telah selesai dan yang ditampilkan.Hal lain yang Anda butuhkan adalah
SINGLE_TOP
bendera. Dengan yang satu ini, Anda mencegah Android membuat aktivitas baru jika sudah ada yang dibuat di tumpukan.Berhati-hatilah karena jika aktivitas sudah dibuat, maksud dengan tanda ini akan dikirimkan dalam metode yang dipanggil
onNewIntent(intent)
(Anda perlu membebani untuk menanganinya) dalam aktivitas target.Kemudian di dalam
onNewIntent
Anda memiliki metode yang disebut restart atau sesuatu yang akan memanggilfinish()
dan meluncurkan maksud baru ke arah itu sendiri, atau memilikirepopulate()
metode yang akan menyetel data baru. Saya lebih suka pendekatan kedua, lebih murah dan Anda selalu dapat mengekstrakonCreate
logika ke dalam metode terpisah yang dapat Anda panggil untuk diisi.sumber
Saya baru saja menerapkan solusi Nepster dan bekerja dengan sangat baik. Ada sedikit modifikasi untuk menjalankannya dari Fragmen.
Untuk Fragmen Anda
Dan ke OnNewIntent () Anda dari Aktivitas, Anda ingin memulai ulang.
sumber
Saya pikir saya memiliki pendekatan termudah ... dengan menekan baru di B ..
dan di A mendapatkannya
sumber
Saya tahu ini adalah pertanyaan lama, beberapa dari metode ini tidak berhasil untuk saya, jadi bagi siapa pun yang melihat ke masa depan atau mengalami masalah saya ini berhasil untuk saya
Saya mengesampingkan
onPause
dan memanggil kefinish()
dalam metode itu.sumber
Panggilan pertama
startactivity()
lalu gunakanfinish()
sumber