Saya memiliki fragmen dalam aktivitas yang saya gunakan sebagai panel samping navigasi. Ini berisi tombol yang ketika diklik memulai aktivitas baru (startActivity dari fragmen hanya memanggil startActivity pada aktivitas saat ini).
Untuk kehidupan saya, saya sepertinya tidak tahu bagaimana saya akan menyelesaikan aktivitas saat ini setelah memulai yang baru.
Saya ingin mencapai sesuatu seperti ini dalam fragmen:
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
if (view == mButtonShows) {
Intent intent = new Intent(view.getContext(), MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
Tetapi tampaknya Fragment.class tidak mengimplementasikan finish () (seperti mengimplementasikan startActivity (...)).
Saya ingin aktivitas backstack dihapus saat mereka meluncurkan aktivitas ke-2. (jadi menekan kembali dari aktivitas baru secara teknis akan menjatuhkannya kembali ke peluncur)
getActivity()
bisanull
dalam beberapa kasus. Lalu apa yang harus kita lakukan?finish
.Sebenarnya ...
Saya tidak akan meminta Fragmen untuk menyelesaikan Aktivitas. Itu menempatkan terlalu banyak otoritas pada Fragmen menurut saya. Sebagai gantinya, saya akan menggunakan panduan ini di sini: http://developer.android.com/training/basics/fragments/communicating.html
Minta Fragmen untuk menentukan antarmuka yang harus diimplementasikan Aktivitas. Lakukan panggilan ke Aktivitas, lalu biarkan Aktivitas memutuskan apa yang harus dilakukan dengan informasinya. Jika aktivitas ingin selesai sendiri, maka bisa.
sumber
Seperti yang disebutkan oleh Jon F Hancock , beginilah cara fragmen dapat 'menutup' aktivitas dengan menyarankan aktivitas untuk ditutup. Ini membuat fragmen portabel seperti alasan mereka. Jika Anda menggunakannya dalam aktivitas lain, Anda mungkin tidak ingin menutup aktivitas tersebut.
Kode di bawah ini adalah cuplikan dari aktivitas dan fragmen yang memiliki tombol simpan dan batalkan.
PlayerActivity
PlayerInfoFragment, yang berisi antarmuka yang perlu diimplementasikan oleh aktivitas pemanggil.
sumber
Setiap kali saya menggunakan finish untuk menutup fragmen, seluruh aktivitas akan ditutup. Menurut dokumen tersebut, fragmen harus tetap ada selama aktivitas induk tetap ada.
Sebaliknya, saya menemukan bahwa saya bisa mengubah tampilan kembali aktivitas induk dengan menggunakan pernyataan ini: setContentView (R.layout.activity_main);
Ini mengembalikan saya ke aktivitas orang tua.
Saya harap ini membantu orang lain yang mungkin mencari ini.
sumber
Sangat sederhana...
1- cukup ambil aktivitas
getActivity()
di dalam fragmen2- lalu panggil
finish();
Jadi hanya
getActivity().finish();
akan menyelesaikan aktivitas orang tua.sumber
Anda harus menggunakan metode getActivity () untuk menyelesaikan aktivitas dari fragmen.
sumber
Dalam Fragment gunakan getActivity.finishAffinity ()
Ini akan menghapus semua fragmen yang didorong oleh aktivitas saat ini dari Stack dengan Aktivitas juga ...
sumber
Coba ini. Seharusnya tidak ada peringatan ...
sumber
15 Juni 2020 - Jawaban yang diperbarui.
Anda memiliki dua opsi untuk Java dan Kotlin. Namun, logika kedua cara itu sama. Anda harus memanggil aktivitas setelah memanggil metode finish () .
Jika aktivitas Anda tidak boleh null, gunakan Answer_1 . Namun, jika aktivitas Anda bisa nol , gunakan Answer_2 .
@bayu_joo
sumber
ya
Fragment.class
tidak diimplementasikanfinish()
Saat bekerja dengan fragmen, alih-alih menggunakan ini atau mengacu pada konteks, selalu gunakan
getActivity()
. Anda harus meneleponsumber