Fragment中创建菜单

最近由于工作原因,在开发Android平台的一些功能,有一个地方用到了根据内容修改菜单项的需求。
iOS上可以在读取加载数据之后,直接修改navigationItem,就以为在Android可以同样的操作,结果却出现了menunull的情况,引发了crash。于是把代码移动到了onCreateOptionsMenu函数中,结果又出现了数据为null的情况,瞬间对于两者的调用顺序迷糊了。
今天去网上查了一下在FragmentonCreateOptionsMenu的调用时机,又仔细看了一下我们的代码,终于发现了问题所在,那就是两者并发了。
先说一下Fragment的生命周期:

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

而创建菜单的函数是onCreateOptionsMenu,它的调用时间在onStart()之后。
我们的代码中是在onActivityCreated(Bundle)中异步进行的数据加载,所以有可能出现菜单还没有创建完成,就已经加载完了数据,导致menunull
同样的,由于我们的代码是异步加载数据,就有存在创建菜单时数据加载未完成的可能,这时候,就会出现数据为null的情况。
无奈之下,我最后是采用了一种不太好的办法,就是两者加载完成时都调用一个函数,在这个函数内判断如果两者都不为null,则进行菜单项的处理。不过我相信肯定会有更好的办法,只是一时之间没有想到,如果谁知道的话,希望能够告诉我一下,非常感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值