Saya menempatkan beberapa breakpoints onCreate
(satu di awal, dan satu di akhir metode), dan saya juga meletakkan satu di awal onCreateOptionsMenu
. The onCreate
metode ini disebut pertama, dan sebelum selesai onCreateOptionsMenu
disebut.
Saya mencoba untuk memisahkan Fragment
kode navigasi di aplikasi saya, jadi saya punya beberapa objek yang saya delegasikan onCreateOptionsMenu
tergantung pada apakah aplikasi berjalan di ponsel / tablet (saya menggunakan ukuran layar untuk menentukan ini, file layout saya untuk layar besar memiliki tampilan yang saya periksa setelah tata letak meningkat). Masalah yang saya alami adalah, saya membuat objek-objek ini di onCreate, dan saya mendapatkan pengecualian null pointer ketika saya referensi objek di onCreateOptionsMenu
.
sumber
NPE
ketika memeriksa apakahnav drawer fragment
itu terbukaonCreateOptionsMenu
. Saya harus meletakkan cek nol di onCreateOptionsMenu aktivitas, serta callback yang digunakan fragmen di onCreateOptionsMenu. Sungguh aneh karena itu hanya terjadi pada beberapa layar, tetapi secara konsisten pada mereka.Dalam kasus saya di Android 2.3 dan dengan
FragmentActivity
dari pustaka dukungan v4 urutan metode siklus hidup yang dipanggil adalah sebagai berikut:sumber
Saya menemukan jika di onResume () saya menelepon
kemudian onCreateOptionsMenu (Menu menu) dipanggil sesudahnya - sesuai siklus hidup aktivitas (saya pikir itu istilah yang benar di sini) , seperti yang ditunjukkan oleh @ tir38
sumber
supportInvalidateOptionsMenu();
invalidateOptionsMenu
, pekerjaan untuk (kembali) membuat menu opsi akan ditambahkan ke antrian pesan UI. Apa pun yang ada dalam antrian akan dijalankan terlebih dahulu.Selain jawaban di atas, Dalam kasus ICS dan Honeycomb onCreateOptionsMenu dipanggil setelah onCreate dan onPostCreate sementara di Gingerbread dan versi sebelumnya disebut setelah onCreate tetapi sebelum onPostCreate. Itulah satu-satunya perbedaan yang saya temukan.
sumber
Dalam pengalaman saya
ActionBarActivity
dari dukungan v7onCreateOptionsMenu()
disebutsetContentView()
metode di tengah-tengahonCreate()
itu muncul pada 4.1.1.Tetapi pada 4.4 cerita lain
onCreateOptionMenu()
dipanggil setelahonCreate()
. Juga saya tidak tahu itu mungkin segera setelah itu, mungkin tidak. Tapi itu fakta setelahnya. Saya tidak menguji pada versi lain tetapi 4.1.1 adalah yang pertama di mana saya memiliki masalah dengan urutan init.sumber
supportInvalidateOptionsMenu()
?saya sarankan untuk membuat fungsi panggil balik di fragmen Anda untuk menghindari masalah waktu dengan onResume () dan onCreateOptionsMenu ().
melakukan pekerjaan berikut tanpa cacat untuk saya:
contoh:
sumber