Fragment中創(chuàng)建菜單

最近由于工作原因,在開(kāi)發(fā)Android平臺(tái)的一些功能,有一個(gè)地方用到了根據(jù)內(nèi)容修改菜單項(xiàng)的需求。
iOS上可以在讀取加載數(shù)據(jù)之后,直接修改navigationItem,就以為在Android可以同樣的操作,結(jié)果卻出現(xiàn)了menunull的情況,引發(fā)了crash。于是把代碼移動(dòng)到了onCreateOptionsMenu函數(shù)中,結(jié)果又出現(xiàn)了數(shù)據(jù)為null的情況,瞬間對(duì)于兩者的調(diào)用順序迷糊了。
今天去網(wǎng)上查了一下在FragmentonCreateOptionsMenu的調(diào)用時(shí)機(jī),又仔細(xì)看了一下我們的代碼,終于發(fā)現(xiàn)了問(wèn)題所在,那就是兩者并發(fā)了。
先說(shuō)一下Fragment的生命周期:

  • onAttach(Activity)
  • onCreate(Bundle)
  • onCreateView(LayoutInflater, ViewGroup, Bundle)
  • onActivityCreated(Bundle)
  • onViewStateRestored(Bundle)
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onDestoryView()
  • onDestory()
  • onDetach()

而創(chuàng)建菜單的函數(shù)是onCreateOptionsMenu,它的調(diào)用時(shí)間在onStart()之后。
我們的代碼中是在onActivityCreated(Bundle)中異步進(jìn)行的數(shù)據(jù)加載,所以有可能出現(xiàn)菜單還沒(méi)有創(chuàng)建完成,就已經(jīng)加載完了數(shù)據(jù),導(dǎo)致menunull
同樣的,由于我們的代碼是異步加載數(shù)據(jù),就有存在創(chuàng)建菜單時(shí)數(shù)據(jù)加載未完成的可能,這時(shí)候,就會(huì)出現(xiàn)數(shù)據(jù)為null的情況。
無(wú)奈之下,我最后是采用了一種不太好的辦法,就是兩者加載完成時(shí)都調(diào)用一個(gè)函數(shù),在這個(gè)函數(shù)內(nèi)判斷如果兩者都不為null,則進(jìn)行菜單項(xiàng)的處理。不過(guò)我相信肯定會(huì)有更好的辦法,只是一時(shí)之間沒(méi)有想到,如果誰(shuí)知道的話,希望能夠告訴我一下,非常感謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容