• Activity中Menu相关的几个方法的调用时机


      用于创建菜单的常用的方法有如下两种:

    1.onCreateOptionsMenu(Menu menu)
    2.onPrepareOptionsMenu(Menu menu)

    MyDiaryActivity中的方法:

     1 /**
     2      * Initialize the contents of the Activity's standard options menu.
     3      * You should place your menu items in to menu. 
     4      */
     5     public boolean onCreateOptionsMenu(Menu menu) {
     6         super.onCreateOptionsMenu(menu);
     7         //经代码测试:只有按手机上的菜单键的时候才执行onCreateOptionsMenu()
     8         System.out.println("===onCreateOptionsMenu()方法====");
     9         menu.add(0, MENU_ITEM_INSERT, 0, R.string.menu_insert);
    10         menu.add(0, android.view.Menu.NONE, 1, R.string.menu_insert_2);
    11         return true;
    12     }
     1 /**
     2      * This is called right before the menu is shown, every time it is shown
     3      */
     4     public boolean onPrepareOptionsMenu(Menu menu) {
     5 
     6         super.onPrepareOptionsMenu(menu);
     7         //在onCreateOptionsMenu(Menu menu)方法之后执行,
     8         System.out.println("public boolean onPrepareOptionsMenu(Menu menu)");
     9         myToast("public boolean onPrepareOptionsMenu(Menu menu) ");
    10         /*
    11          * getListAdapter():Get the ListAdapter associated with this activity's
    12          * ListView. getCount():How many items are in the data set represented
    13          * by this Adapter.
    14          */
    15 
    16         final boolean haveItems = getListAdapter().getCount() > 0;
    17         myToast("getListAdapter().getCount()一共有" + getListAdapter().getCount()
    18                 + "个");
    19         if (haveItems) {
    20             // getListView():Get the activity's list view widget.
    21             if (getListView().getSelectedItemId() > 0) {
    22                 menu.removeGroup(1);
    23 
    24                 Uri uri = ContentUris.withAppendedId(getIntent().getData(),
    25                         getListView().getSelectedItemId());
    26 
    27                 Intent intent = new Intent(null, uri);
    28                 // TODO 下面这行代码还不知道到底怎么用
    29                 menu.add(1, MENU_ITEM_EDIT, 1, "编辑内容").setIntent(intent);
    30                 menu.add(1, MENU_ITEM_DELETE, 1, "删除当前日记");
    31 
    32             }
    33         } else {
    34             menu.removeGroup(1);
    35         }
    36 
    37         return true;
    38     }

    以上这两个方法都是在用户点击了菜单按钮之后才执行,先执行:

     1.onCreateOptionsMenu(Menu menu) 

    然后执行

     2.onPrepareOptionsMenu(Menu menu)

    注意点,

    这两个方法在整个应用的生命周期里的执行次数一般是不同的,具体区别如下:

    onCreateOptionsMenu(Menu menu) 只执行一次,就是安卓应用打开后,用户第一次按菜单键的时候执行这个方法,只要这个Activity不销毁,即只要还没有执行到

    onDestroy()方法,那么onCreateOptionsMenu(Menu menu) 就不会再执行了。

    而相对的,只要用户点击了菜单键,那么onPrepareOptionsMenu(Menu menu)这个方法就会执行一次点一次就执行一次

    这是这两者的很重要的区别。

  • 相关阅读:
    前端与算法 leetcode 387. 字符串中的第一个唯一字符
    前端与算法 leetcode 283. 移动零
    前端与算法 leetcode 125. 验证回文串
    前端与算法 leetcode 7. 整数反转
    vue-create 报错 command failed: yarn --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/dist 完美解决方案
    前端与算法 leetcode 242. 有效的字母异位词
    javascript 解决默认取整的坑(目前已知的最佳解决方案)
    Excel中countif函数的使用方法
    excel的函数基础——if条件函数该怎么用?
    excel 这也许是史上最好最全的VLOOKUP函数教程
  • 原文地址:https://www.cnblogs.com/Sunnor/p/4799059.html
Copyright © 2020-2023  润新知