Fragment中创建菜单

作者: 移动开发_ziank | 来源:发表于2017-10-18 10:06 被阅读39次

最近由于工作原因,在开发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,则进行菜单项的处理。不过我相信肯定会有更好的办法,只是一时之间没有想到,如果谁知道的话,希望能够告诉我一下,非常感谢。

相关文章

  • Fragment中创建菜单

    最近由于工作原因,在开发Android平台的一些功能,有一个地方用到了根据内容修改菜单项的需求。在iOS上可以在读...

  • Fragment 菜单

    必须在fragment初始化时 创建菜单和菜单的点击事件

  • Android 实战:美食项目(二)

    创建导航和底部菜单栏 创建几个页面的fragment和添加navigation 有关fragment的创建可参考h...

  • Fragment

    1.静态添加Fragment ①创建一个fragment②创建布局,把①中的fragment放到布局中❤注意:①必...

  • Fragment

    1.静态添加Fragment ①创建一个fragment②创建布局,把①中的fragment放到布局中*注意:①必...

  • Fragment

    静态添加fragment①创建一个fragment②创建布局,把①中的fragment放到布局中注意:①必须要有i...

  • Fragment操作ToolBar

    Fragment中对ToolBar添加MenuItem,创建menu_change,Fragment中复写void...

  • Android学习笔记——顶/底部Tab菜单栏结合Fragmen

    Fragment+FragmentTabHost+ViewPager实现底部菜单栏 总体思路 Fragment:存...

  • 为什么fragment不能用构造函数传参数

    fragment的构造函数是空的 instantiate方法中创建了fragment对象 instantiate ...

  • 正确创建Fragment的姿势

    如果出现fragment中onSavedInstanceState中保存的状态在fragment再次创建的时候无法...

网友评论

    本文标题:Fragment中创建菜单

    本文链接:https://www.haomeiwen.com/subject/majsuxtx.html