android那些事--上下文菜单

##Menu的创建,选择监听

```

/**

* 此方法用于初始化上下文菜单 并只会在第一次初始化菜单时调用

* 其中参数menu就是即将要显示的Menu的实例

* 返回true 则显示该菜单  返回false不显示

*

* @param menu

* @return

*/

@Override

public boolean onCreateOptionsMenu(Menu menu) {

return super.onCreateOptionsMenu(menu);

}

/**

* 在onCreateOptionsMenu 方法调用后 菜单被显示前调用

* 返回true显示该菜单 返回false 不显示

*

* @param menu

* @return

*/

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

return super.onPrepareOptionsMenu(menu);

}

/**

* 菜单被关闭的时候被调用

* 菜单被关闭有三种情景 menu按钮再次被点击  back被点击  某一个子菜单被选中

*

* @param menu

*/

@Override

public void onOptionsMenuClosed(Menu menu) {

super.onOptionsMenuClosed(menu);

}

/**

* 菜单项被点击的时候被调用

*

* @param item

* @return

*/

@Override

public boolean onOptionsItemSelected(MenuItem item) {

return super.onOptionsItemSelected(item);

}

```

##添加菜单

从的方法中可以看出可以在onCreateOptionMenu或者onPrepareOptionsMenu方法中创建菜单,同时需要注意的是通过这两个方法有两种添加菜单的方式

```

通过调用方法

public MenuItem add(int groupId, int itemId, int order, CharSequence title);

来完成菜单的添加,四个参数依次是

1.组id  如果不分组的话就写Menu.NONE

2.itemId 这个就是在子菜单被点击时用于判断区分用的id

3.子菜单的显示顺序  哪个菜单项在前面由这个参数的大小决定

4.标题 菜单显示的文本

```

```

通过调用布局文件添加

public boolean onPrepareOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main,menu);

return true;

}

通过调用Activity的getMenuInflater 得到一个MenuInflater 在通过inflate方法加载布局文件中定义的菜单 这样就加载给第二个参数所对应的menu

```

##在Fragment中添加菜单

在自己的Fragment中也有onCreateOptionMenu和onPrepareOptionsMenu这两个方法,通过在fragment中实现两个方法添加的菜单会被添加到已有菜单之后,选中菜单项时 fragment也会接收onOptionsItemSelected()回调.需要注意的是用户点击菜单的信息首先传递给activity 如果activity不处理 则传递给fragment

```

需要注意的是为了确保回调成功 需要在fragment的onCreate()方法中调用setHasOptionsMenu() 告知Options Menu  fragment要添加菜单项

```

你可能感兴趣的:(android那些事--上下文菜单)