Saya memiliki kode pelanggan. Hanya ada satu aktivitas untuk semua fragmen, yaitu aktivitas tunggal mengelola semua fragmen.
Aktivitas ini berisi kode berikut untuk setiap fragmen di akhir metode fragmen itu-
Misalnya - fragmen MoreFragment:
MoreFragment firstFragment = new MoreFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();
Begitu,
1) Apa artinya addToBackStack(null)
diikuti dengan a commit()
?
2) Mengapa Anda perlu meneruskan parameter null ke addToBackStack
?
3) Bagaimana cara mendapatkan fragmen itu setelah ditambahkan seperti ini?
Sepertinya kode ini tidak berguna karena saya menjalankan kode tanpa baris terakhir .addToBackStack(null).commit()
dan berjalan tanpa masalah.
android
android-fragments
Tuhanku
sumber
sumber
Jawaban:
Mengutip dokumen:
Urutan Anda menambahkan perubahan ke FragmentTransaction tidak penting, kecuali:
Anda harus menelepon
commit()
terakhir. Jika Anda menambahkan beberapa fragmen ke penampung yang sama, maka urutan Anda menambahkannya menentukan urutan kemunculannya dalam hierarki tampilan.Jadi, Anda harus berkomitmen pada akhirnya.
Tidak perlu nol, ini bisa berupa string. Jika Anda tidak mau, berikan null.
Tentang:
Jika Anda ingin menavigasi ke fragmen sebelumnya, tambahkan ke backstack. Jadi itu tergantung pada apakah Anda ingin menambahkan fragmen ke backstack.
Anda sudah memiliki instance fragmen
firstFragment
. Jadi saya tidak tahu apa yang Anda maksud dengan mendapatkan fragmen nanti.Informasi lebih lanjut @
http://developer.android.com/guide/components/fragments.html
http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)
sumber
getFragmentManager().popBackStackImmediate()
jika tombol back dapat melakukannya sendiri dengan / tanpa parameter pass? Lihat jawaban dari - stackoverflow.com/questions/21156153/…The
tag
string dalamaddToBackStack(String name)
memberikan cara untuk menemukan tumpukan kembali untuk kemudian pop langsung ke lokasi tersebut. Ini dimaksudkan untuk digunakan dalam metodepopToBackStack(String name, int flags)
:Dengan kata lain, ini akan memunculkan back-stack Anda sampai menemukan fragmen yang ditambahkan oleh
name
inaddToBackStack(String name)
.Misalnya, jika Anda melakukan serangkaian penambahan atau penggantian ke pengelola fragmen dengan memberikan nama "frag1", "frag2", "frag3", "frag4" dan kemudian ingin kembali langsung ke fragmen 2 yang ditambahkan dengan addToBackStack (" frag2 "), panggil
popToBackStack("frag2", 0)
.Begitu,
Gunakan
.addToBackStack("fragName")
: jika Anda ingin nantipopToBackStack(String name, int flags)
memunculkan lebih dari satu back-stack.Gunakan
.addToBackStack(null)
: Jika Anda tidak ingin nanti pop lebih dari satu back-stack, tapi masih ingin pop satu per satu. Lakukan ini bahkan jika Anda tidak akan memanggil popToBackStack () secara eksplisit, tetapi sebaliknya akan membiarkan implementasi default tekan kembali menangani back-stack.Gunakan
.disallowAddToBackStack()
: Jika Anda tidak ingin menekan kembali atau memanggil popBackStack () secara eksplisit. Ini akan memastikan tidak ada bagian kode yang menggunakan .addToBackStack ().sumber
Jawaban Anda tidak berlaku lagi. Jika Anda tidak ingin menambahkan fragmen ke back-stack, Anda harus menggunakan cuplikan kode di bawah ini:
public static void replaceFragment (@NonNull FragmentManager fragmentManager, @NonNull Fragment fragment, int frameId){ checkNotNull(fragmentManager); checkNotNull(fragment); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(frameId, fragment); transaction.disallowAddToBackStack(); // <-- This makes magic! transaction.commit(); }
Di bawah ini Anda memiliki contoh lucu bagaimana menggunakannya:
sumber
disallowAddToBackStack
, panggilan apa pun di masa mendatang ke addToBackStack akan memunculkan IllegalStateException. Jika addToBackStack sudah dipanggil, metode ini akan menampilkan IllegalStateException.