android menu事件,androidonPrepareOptionsMenu()事件

1. onPrepareOptionsMenu()调用时机。

一般情况下,每次按menu键Framewrok都会先调用onPrepareOptionsMenu(),准备需要显示的菜单。但是当按menu键之前调用了Activity.invalidateOptionsMenu()之后,情况变的不一样,调用完Activity.invalidateOptionsMenu()之后,Framework会立即调用onPrepareOptionsMenu()准备好菜单项数据,之后当用户按menu键时,Framework不会再次调用onPrepareOptionsMenu(),而是将之前准备好的菜单显示出来。这点一定要注意。

2. 清除之前的menu数据。

每次调用onPrepareOptionsMenu()的时候需要首先调用menu.clear()清除一下之前的menu数据,如果不清除的话,之前的menu数据不会被释放,造成内存泄漏。

3 在android中创建菜单menu时需要重写Activity的onCreateOptionsMenu(Menumenu)方法,这个方法只在第一次创建的时候调用一次,所以如果之后想对menu进行动态的修改,那么就不能再对onCreateOptionsMenu做什么手脚,就要用到onPrepareOptionsMenu(Menumenu)方法了。onPrepareOptionsMenu与onCreateOptionsMenu不同的是,他在每次按下menu硬键之前会被调用,所以可以在这里动态的改变menu。

onCreateOptionsMenu

只會呼叫一次,他只會在MENU顯示之前,去做一次!!!之後就不會再去呼叫!

onPrepareOptionsMenu

onPrepareOptionsMenu是每次在display menu之前,都會去呼叫,

只要按一次menu按鍵,就會呼叫一次。

所以你會發現每次只要按一次menu按鍵,

menu選單就會多兩個(因為我們預設是兩個)

你可以利用onPrepareOptionsMenu來做update menu狀態的動作

如果你要把menu現有的option清空,就是下面那行CODE

menu.clear();

还有,在fragment中的onCreateOptionsMenu和Activity中的参数不同的,多了个MenuInflater,所以在fragment中调用MenuInflater的时候,要这么调用:

MenuInflater inflater = this.getActivity().getMenuInflater();

@Override

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

// 在onCreateOptionsMenu()之前必须在onCreate中调用setHasOptionsMenu(true)

inflater.inflate(R.menu.menu_three, menu);

super.onCreateOptionsMenu(menu, inflater);

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值