Pertanyaan Fragmen Android: apakah konstruktor kosong sangat diperlukan?


Saya memiliki aktivitas dengan pager dan FragmentStatePagerAdapter di dalam (saya perlu menggesek melintasi banyak halaman). Seperti yang kita semua tahu, adaptor ini menciptakan 3 contoh fragmen pada satu waktu, yang akan ditampilkan, yang sebelumnya dan yang berikutnya.

Aktivitas saya bekerja sangat bagus menggunakan fragmen dengan hanya satu konstruktor: ia menerima 1 parameter. Saat menguji, saya mulai mendapatkan pesan yang terkenal:

Unable to instantiate fragment: make sure class name exists, is public, 
and has an empty constructor that is public 

Bagian yang lucu adalah bahwa pesan ini hanya muncul tepat setelah orientasi berubah, tetapi aplikasi hanya berfungsi jika orientasi tetap diam. Begitu,

  1. Mengapa itu berfungsi saat orientasi tidak berubah?
  2. Mengapa gagal ketika orientasi diubah?
  3. Apa perbedaan dalam aktivitas siklus kehidupan fragmen ketika orientasi berubah vs aktivitas baru saja dibuat?

Terima kasih banyak


5
2017-09-22 22:29


asal


Jawaban:


konstruktor kosong benar-benar diperlukan?

Iya nih.

Mengapa itu berfungsi saat orientasi tidak berubah?

Karena Android tidak mencoba membuat ulang fragmen Anda.

Mengapa gagal ketika orientasi diubah?

Karena Android membuat ulang fragmen Anda.

Ketika perubahan konfigurasi terjadi (misalnya, perubahan orientasi), secara default Android menghancurkan dan membuat ulang aktivitas Anda, dan juga menghancurkan dan membuat ulang fragmen dalam aktivitas itu. Bagian "membuat ulang fragmen" adalah mengapa Anda memerlukan konstruktor publik nol-argumen pada fragmen Anda. Ini juga digunakan dalam kasus lain, seperti dengan FragmentStatePagerAdapter.

Atau, mengutip dokumentasi:

Semua subkelas Fragmen harus menyertakan konstruktor kosong publik. Kerangka kerja ini akan sering mengembalikan instantiate kelas fragmen bila diperlukan, khususnya selama pemulihan keadaan, dan perlu dapat menemukan konstruktor ini untuk memberi contoh. Jika konstruktor kosong tidak tersedia, pengecualian runtime akan terjadi dalam beberapa kasus selama pengembalian negara.


12
2017-09-22 22:37