Apa perbedaan mendasar antara kedua metode ini? Saat saya membuat TextView, haruskah saya menggunakan salah satu dari yang lain untuk kinerja?
Edit: Apa bedanya
onCreateView() {
root = some view
View v = new View(some context);
root.add(v);
return root;
}
onViewCreated() {
View v = new View(some context);
getView().add(v);
}
Jawaban:
Kami menghadapi beberapa error saat memulai tampilan di
onCreateView
.Karena terkadang view tidak diinisialisasi dengan benar. Jadi selalu gunakan
findViewById
dalamonViewCreated
(saat tampilan sepenuhnya dibuat) dan ini juga meneruskan tampilan sebagai parameter.onViewCreated
adalah untuk memastikan bahwa tampilan sepenuhnya dibuat.Dipanggil segera setelah
onCreateView
(android.view.LayoutInflater, android.view.ViewGroup
,android.os.Bundle
) dikembalikan, tetapi sebelum status tersimpan apa pun dipulihkan ke tampilan. Hal ini memberi kesempatan kepada subclass untuk menginisialisasi dirinya sendiri setelah mengetahui hierarki tampilannya telah dibuat sepenuhnya. Namun, hierarki tampilan fragmen tidak dilampirkan ke induknya pada saat ini.sumber
post
(...) untuk menunggu sampai ditampilkan. Mungkin akan membuat findViewById dan inisialisasi lainnya dionViewCreated
.onViewCreated
dipanggil segera setelahnyaonCreateView
(metode Anda menginisialisasi dan membuat semua objek Anda, termasuk AndaTextView
), jadi ini bukan masalah kinerja.Dari situs pengembang:
Sumber: Fragment # onViewCreated
sumber
Lebih baik melakukan tugas subview ke bidang di
onViewCreated
. Ini karena framework melakukan pemeriksaan null otomatis untuk Anda guna memastikan bahwa hierarki tampilan Fragmen Anda telah dibuat dan ditingkatkan (jika menggunakan file layout XML) dengan benar.Cuplikan kode dari: FragmentManger.java
sumber
onCreateView
digunakan untuk membuat hierarki tampilan fragmen. Ini bisa melalui inflasi XML atau pembuatan dinamis (yaitu, membuat tampilan Java secara terprogram). Jadi, Anda mungkin tidak meneleponinflate
sama sekali. Tetapi Anda harus mengembalikan beberapa tampilan induk jika fragmen tersebut perlu memiliki elemen UI. Jika tidak kembalinull
.FragmentManager
kode fragmen danperformCreateView
, yang memanggilonCreateView
github.com/android/platform_frameworks_base/blob/… , Anda dijamin akan mendapatkan beberapa hal untukonViewCreated
panggilan balik siklus hidup:onCreateView
mengembalikan tampilan yang meningkat.OnViewCreated
dipanggil tepat setelahonCreateView
dan get memiliki parameter tampilan yang meningkat. Jenis kembalinya adalahvoid
sumber
getView
panggilanonCreateView()
adalah Fragmen yang setara denganonCreate()
untuk Aktivitas dan dijalankan selama pembuatan Tampilan.onViewCreated()
berjalan setelah View dibuat.should I use one over the other for performance?
TIDAK . Tidak ada bukti peningkatan kinerja.Sebenarnya ada
onCreate()
metode di Fragmen juga, tetapi jarang digunakan (saya tidak pernah menggunakannya, atau menemukan kasus penggunaan yang baik untuk itu).Saya selalu menggunakan
onCreateView()
Fragmen sebagai penggantionCreate()
.Dan saya senang dengan itu.
sumber
onCreateView
itu setara dengan AktivitasonCreate
.onCreate()
metode di Framents juga. Tapi itu tidak pernah digunakan (atau, setidaknya, saya tidak pernah menggunakannya). Saya selalu menggunakanonCreateView()
Fragmen sebagai pengganti.Dokumen untuk
Fragment.onCreateView()
saat ini mengatakan:Tidak perlu bagi kami untuk memahami mengapa; kami hanya perlu melakukan apa yang dikatakan oleh dokumen, tetapi akan menarik untuk mengetahui mengapa rekomendasi ini ada. Tebakan terbaik saya adalah pemisahan perhatian , tetapi IMHO ini membuatnya sedikit lebih rumit dari yang seharusnya.
sumber
setContentView()
dalamonCreate()
?Alasan utama yang akan saya gunakan
onViewCreated
adalah karena memisahkan logika inisialisasi apa pun dari hierarki tampilan logika inflasi / pembuatan yang harus masuk dalam fileonViewCreate
. Semua karakteristik kinerja lainnya terlihat sama.sumber
Saya pikir perbedaan utama antara ini adalah ketika Anda menggunakan kotlin.in onCreateView () setiap kali Anda ingin mengakses untuk melihat di file xml Anda, Anda harus menggunakan findViewById tetapi di onViewCreated Anda cukup mengakses ke tampilan Anda hanya dengan memanggil id-nya .
sumber
onCreateView digunakan dalam fragmen untuk membuat tata letak dan meluaskan tampilan. onViewCreated digunakan untuk mereferensikan tampilan yang dibuat dengan metode di atas. Terakhir, adalah praktik yang baik untuk mendefinisikan pendengar tindakan di onActivityCreated.
sumber