Perbedaan dan penggunaan onCreate (), onCreateView () dan onActivityCreated () dalam fragmen

329

Apa perbedaan antara onCreate(),, onCreateView()dan onActivityCreated()dalam fragmen dan untuk apa mereka masing-masing akan digunakan?

Farbod Salamat-Zadeh
sumber
@BradLarson Saya tidak mengerti mengapa ini ditutup. Ini terbukti menjadi pertanyaan yang relatif populer dan berbeda dengan tautan yang tercantum dalam komentar Anda. Pertanyaan ini menanyakan perbedaan antara tiga metode yang berbeda dan bagaimana mereka membandingkan satu sama lain tetapi pertanyaan yang Anda tautkan dalam komentar Anda hanya menyebutkan dua metode ini.
Farbod Salamat-Zadeh
@BradLarson Cukup adil dan terlihat dengan baik. Sekarang saya sudah memiliki pemahaman, tidak bisakah saya menulis jawaban yang lebih baik membandingkan tiga metode, merujuk tautan untuk detail tambahan?
Farbod Salamat-Zadeh
2
@ FarbodSalamat-Zadeh - Tentu. Saya telah membuka kembali pertanyaan, jika Anda pikir Anda dapat memberikan jawaban yang lebih baik. Aku hanya tidak ingin meninggalkannya tanpa jawaban jika aku bisa.
Brad Larson

Jawaban:

395

onCreate ():

The onCreate()Metode dalam Fragmentyang disebut setelah Activity'sonAttachFragment() tapi sebelum itu Fragment' s onCreateView().
Dalam metode ini, Anda dapat menetapkan variabel, mendapatkan Intenttambahan, dan hal lain yang tidak melibatkan hierarki tampilan (yaitu inisialisasi non-grafis). Hal ini karena metode ini bisa disebut ketika Activity's onCreate()belum selesai, dan mencoba untuk mengakses View hirarki sini dapat mengakibatkan kecelakaan.

onCreateView ():

Setelah onCreate()disebut (dalam Fragment), Fragment's onCreateView()disebut. Anda dapat menetapkan Viewvariabel Anda dan melakukan inisialisasi grafis apa pun . Anda diharapkan untuk mengembalikan a Viewdari metode ini, dan ini adalah tampilan UI utama, tetapi jika Anda Fragmenttidak menggunakan tata letak atau grafik, Anda dapat kembali null(terjadi secara default jika Anda tidak menimpa).

onActivityCreated ():

Sebagai nama negara, ini disebut setelah Activity's onCreate()telah menyelesaikan . Disebut setelah onCreateView(), dan terutama digunakan untuk inisialisasi akhir (misalnya, memodifikasi elemen UI).


Singkatnya ...
... mereka semua dipanggil Fragmenttetapi dipanggil pada waktu yang berbeda.
The onCreate()disebut pertama, untuk melakukan apapun initialisations non-grafis. Selanjutnya, Anda dapat menetapkan dan mendeklarasikan Viewvariabel apa pun yang ingin Anda gunakan onCreateView(). Setelah itu, gunakan onActivityCreated()untuk melakukan inisialisasi akhir yang ingin Anda lakukan setelah semuanya selesai.


Jika Anda ingin melihat dokumentasi Android resmi, dapat ditemukan di sini:
- - -onCreate()
onCreateView()
onActivityCreated()

Ada juga beberapa pertanyaan / jawaban yang sedikit berbeda, tetapi kurang berkembang di Stack Overflow:

Farbod Salamat-Zadeh
sumber
6
Saya pikir saya akan menerapkan inisialisasi non-grafis di onCreate () sehingga mereka tidak akan dipanggil lagi ketika layar diputar. Ternyata saya harus memanggil fragment.setRetainInstance (true) kalau tidak onCreate () dan onCreateView () dipanggil lagi ketika layar diputar.
Damn Vegetables
Di onCreateView (), apakah itu aman untuk mengakses hierarki tampilan?
Cody
@Cody Saya percaya begitu - mengakses hierarki tampilan adalah tujuan yang tepat onCreateView.
Farbod Salamat-Zadeh
1
Namun, aktivitas onCreate () mungkin tidak selesai hingga onActivityCreated ()? Apakah ini ada kemungkinan crash di onCreateView untuk mengakses hierarki tampilan? Saya tidak yakin apa perbedaan antara onCreateView () / on onActivityCreated ()
Cody
1
Satu hal yang perlu diperhatikan (setidaknya dengan AppCompatActivity) adalah ketika aktivitas dibuat kembali (mis. Setelah diperkecil dan dibunuh) fragmen onCreate () akan dipanggil sebelum aktivitas onCreate () dan super.onCreate () selesai. Ini bisa menjadi masalah jika Anda menggunakan sesuatu seperti Belati dan perlu mengakses sesuatu di aktivitas induk yang disuntikkan. Salah satu solusi untuk ini adalah dengan meletakkan kode di onActivityCreated () yang disebut selalu dipanggil onCreate () disebut.
Nicholas
144

Bagi siapa pun yang mencari jawaban singkat dan bergambar:

masukkan deskripsi gambar di sini https://hanaskuliah.wordpress.com/2015/12/07/android-5-development-part-6-fragment/


Dan,

masukkan deskripsi gambar di sini

pulp_fiction
sumber
21
Sepakat. Komik Sans diperlukan untuk hal-hal seperti ini
Kartik Chugh
1
Ini pertama kalinya saya melihat 3 font berbeda dalam diagram yang sama, dan entah bagaimana hidup saya terasa lengkap sekarang.
Gil Sand
Kapan tepatnya sebuah fragmen bisa restart?
Saurabh
1
Kenapa fragmen itu tidak dibuat ulang begitu prosesnya mati? AFAIK, hanya status tugas yang dipertahankan sebagai satu bundel dan aplikasi itu dibuat ulang dibawa ke latar depan lagi.
stdout
6

onActivityCreated () - Sudah usang

onActivityCreated()sekarang tidak digunakan lagi sebagai Versi Fragmen 1.3.0-alpha02

Metode onActivityCreated () sekarang tidak digunakan lagi. Kode yang menyentuh tampilan fragmen harus dilakukan di onViewCreated () (yang dipanggil segera sebelum onActivityCreated ()) dan kode inisialisasi lainnya harus dalam onCreate (). Untuk menerima panggilan balik secara khusus ketika aktivitas onCreate () selesai, LifeCycleObserver harus didaftarkan pada Siklus Hidup aktivitas di onAttach (), dan dihapus setelah panggilan balik onCreate () diterima.

Informasi terperinci dapat ditemukan di sini

Gastón Saillén
sumber