androidonPrepareOptionsMenu()事件

2060阅读 0评论2013-07-26 黑曼巴snake
分类:Android平台

1. onPrepareOptionsMenu()调用时机。

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

2. 清除之前的menu数据。

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

android创建菜单menu时需要重写ActivityonCreateOptionsMenu(Menumenu)方法,这个方法只在第一次创建的时候调用一次,所以如果之后想对menu进行动态的修改,那么就不能再对onCreateOptionsMenu做什么手脚,就要用到onPrepareOptionsMenu(Menumenu)方法了。onPrepareOptionsMenuonCreateOptionsMenu不同的是,他在每次按下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);
    }

上一篇:android onConfigurationChanged事件
下一篇:ViewPager的onPageChangeListener里面的一些方法参数: