Katakanlah saya memiliki aktivitas yang memiliki fragmen yang ditambahkan secara terprogram:
private void animateToFragment(Fragment newFragment, String tag) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, tag);
ft.addToBackStack(null);
ft.commit();
}
Apa cara terbaik untuk kembali ke fragmen sebelumnya yang terlihat?
Saya menemukan fungsi tombol kembali Pemicu pada klik tombol di Android tapi saya berpikir mensimulasikan peristiwa tombol kembali bukan cara yang tepat untuk melakukannya (dan saya juga tidak bisa membuatnya berfungsi):
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
Menelepon finish()
hanya menutup aktivitas yang saya tidak tertarik.
Apakah ada cara yang lebih baik untuk melakukan ini?
android
android-fragments
back-stack
Aske B.
sumber
sumber
getFragmentManager().popBackStackImmediate();
melakukan trik. Terima kasih.Untuk menguraikan jawaban lain yang disediakan, ini adalah solusi saya (ditempatkan di Aktivitas):
sumber
fm.getBackStackEntryCount() > 1
untuk memanggil aktivitas kembali ketika hanya ada fragmen pertama di tumpukan.Ketika kami memperbarui / menambahkan fragmen,
Harus Termasuk
.addToBackStack()
.Setelah itu jika kita memberi
getFragments.popBackStackImmediate()
akan mengembalikan true jika kita menambah / memperbarui fragmen, dan kembali ke layar saat ini.sumber
Tambahkan baris tersebut ke Metode onBackPressed () Anda. Metode popBackStackImmediate () akan membawa Anda kembali ke fragmen sebelumnya jika Anda memiliki fragmen di back stack `
`
sumber
Solusi ini berfungsi sempurna untuk navigasi fragmen berbasis bar bawah ketika Anda ingin menutup aplikasi ketika ditekan kembali dalam fragmen primer.
Di sisi lain ketika Anda membuka fragmen sekunder (fragmen dalam fragmen) yang didefinisikan sebagai "DetailedPizza" dalam kode saya, itu akan mengembalikan keadaan sebelumnya dari fragmen primer. Bersulang !
Aktivitas di dalam ditekan kembali menempatkan ini:
Dan luncurkan fragmen lain seperti ini:
sumber
Jawaban ini tidak berfungsi jika saya tidak menambahkan addToBackStack () ke transaksi fragmen saya tetapi, Anda dapat menggunakan:
dari setiap fragmen Anda untuk mundur satu langkah;
sumber
Secara terprogram kembali ke fragmen sebelumnya menggunakan kode berikut.
sumber
Untuk membuat fragmen itu kembali, cukup tambahkan fragmen itu ke backstack yang ingin Anda tekan kembali, misalnya:
Dalam kasus di atas, saya membuka
LoginFragment
saatButton button
ditekan, saat ini pengguna sedang masukSignupFragment
. Jadi jikaaddToBackStack(TAG)
dipanggil, di manaTAG = "SignupFragment"
, lalu ketika tombol kembali ditekanLoginFragment
, kita kembali keSignUpFragment
.Selamat Coding!
sumber
Dengan menambahkan
fragment_tran.addToBackStack(null)
fragmen terakhir, saya bisa kembali pada fragmen terakhir.menambahkan fragmen baru :
sumber
Saya datang ke sini mencari atau ide yang sama, dan sementara itu saya datang dengan sendiri, yang saya percaya tidak terlalu buruk dan berfungsi jika dengan ViewPager.
Jadi yang saya lakukan adalah mengganti metode onBackPressed dalam aktivitas induk yang memegang viewPager, dan mengaturnya untuk selalu kembali ke posisi minus 1 hingga mencapai fragmen pertama, kemudian menutup aktivitas.
Ini mungkin memiliki kejatuhan, seperti itu hanya kembali satu arah ke kiri setiap kali, jadi mungkin tidak berfungsi dengan baik jika ada tab dan Anda beralih posisi dengan potongan-potongan yang dilompati, (pergi dari 0 ke 2, dan kemudian menekan kembali akan menempatkan Anda pada 1, bukannya 0)
Untuk kasus saya, dengan 2 fragmen di viewPager tanpa tab, ini berfungsi dengan baik.
sumber
Coba kode di bawah ini:
sumber