Bagaimana saya bisa mengatur Fragment
's Id
sehingga saya dapat menggunakan getSupportFragmentManager().findFragmentById(R.id.--)
?
111
Bagaimana saya bisa mengatur Fragment
's Id
sehingga saya dapat menggunakan getSupportFragmentManager().findFragmentById(R.id.--)
?
Jawaban:
Anda tidak dapat menyetel ID fragmen secara terprogram .
Namun, ada
String tag
yang dapat Anda setel di dalam FragmentTransaction yang dapat digunakan untuk mengidentifikasi Fragmen secara unik.Sebagai Aleksey menunjukkan, Anda dapat lulus ID untuk
FragmentTransaction
'sadd(int, Fragment)
metode. Namun, ini tidak menentukan ID untuk Fragmen. Ini menentukan ID dari yangViewGroup
akan dimasukkanFragment
ke. Ini tidak begitu berguna untuk tujuan yang saya harapkan Anda miliki, karena ini tidak secara unik mengidentifikasiFragment
s, tetapiViewGroup
s. ID ini adalah wadah tempat satu atau beberapa fragmen dapat ditambahkan secara dinamis. Menggunakan metode seperti itu untuk mengidentifikasiFragment
s akan mengharuskan Anda untuk menambahkanViewGroup
s secara dinamis ke Layout untuk setiapFragment
Anda menyisipkan. Itu akan sangat merepotkan.Jadi jika pertanyaan Anda adalah cara membuat pengenal unik untuk Fragment Anda menambahkan dinamis, jawabannya adalah dengan menggunakan
FragmentTransaction
's add (int containerViewId, Fragment fragmen, tag String) metode danFragmentManager
' s findFragmentByTag (String) metode.Di salah satu aplikasi saya, saya dipaksa untuk membuat string secara dinamis. Tapi itu tidak terlalu mahal dibandingkan dengan FragmentTransaction yang sebenarnya.
Keuntungan lain dari metode tag adalah dapat mengidentifikasi Fragmen yang tidak ditambahkan ke UI. Lihat metode add (Fragment, String) FragmentTransaction .
Fragment
s tidak perluView
s! Mereka juga dapat digunakan untuk mempertahankan status sementara di antara perubahan konfigurasi!sumber
Ternyata Anda mungkin tidak perlu mengetahui id fragmen.
Dari dokumen:
Bagian yang penting adalah "sebagai ID penampung saat ditambahkan dalam transaksi".
begitu:
lalu
akan memberi Anda fragmen (keren) apa pun yang disimpan di R.id.fragment_holder.
sumber
Dalam kebanyakan kasus, Anda dapat menggunakan tag fragmen serta ID.
Anda dapat menyetel nilai tag di
FragmentTransaction.add(Fragment fragment, String tag );
. Kemudian Anda dapat menggunakan perintahFragmentManager.findFragmentByTag(String tab)
untuk menemukan fragmen yang dimaksud.sumber
Seperti yang telah disebutkan Tom dan yang lainnya, ada cara untuk memberi tag pada sebuah fragmen dan menggunakan tag itu untuk identifikasi. Masalah berikutnya yang saya temukan dengan solusi tersebut adalah bahwa fragmen tidak mendapatkan tag hingga dikaitkan dengan Aktivitas (atau, sebenarnya,
FragmentManager
). Apa yang harus dilakukan jika seseorang perlu mengidentifikasi fragmen sebelum diberi tag?Solusi saya sejauh ini semuanya bergantung pada trik (Java) tertua di dunia: buat fragmen template minimalis yang mengambil id di salah satu konstruktornya dan menyediakan
getFragmentId()
metode yang mengembalikan id itu. Saya kemudian membiarkan fragmen yang membutuhkan identifikasi awal memperluas template itu dan; voila! Masalah terpecahkan.Sayangnya, solusi ini mungkin memerlukan sekumpulan fragmen template, satu untuk setiap jenis fragmen
ListFragment
,DialogFragment
atau biasa sajaFragment
(POFO ?!) yang memerlukan identifikasi awal. Tetapi ini dapat dikelola dalam kasus fragmen, saya kira, mengingat keuntungan yang diberikan.Maaf telah merobek luka penyembuhan :-)
Bersulang!
sumber
Gunakan yang berikut ini:
Untuk menambahkan fragmen:
Untuk mengidentifikasi fragmen yang ada:
sumber
Saat menggunakan tag, harap pastikan untuk menambahkan
metode sehingga Fragmen Anda dilanjutkan, bukan dimusnahkan, seperti yang disebutkan dalam panduan pengembang.
Anda dapat menemukannya di akhir halaman ini .
Saya kehilangan waktu sekitar 30 menit mencoba mencari tahu mengapa Fragmen saya tidak ditemukan melalui
findFragmentByTag();
panggilan sederhanasumber
Selain jawaban Tom, metode replace juga mendukung tag fragmen, selain menambahkan metode.
sumber