Jon*_*nas 43 android menuitem alternation options-menu
我的"选项菜单"上Activity有一个MenuItem"开始".MenuItem选择此项后,我想更改菜单,使其包含MenuItem"停止".最后,当选择"停止"时,我想改回"开始".
以下是我的代码中无法正常工作的部分内容.我在列表中列出了"开始"和"停止",mymenu.xml我应该在创建菜单时删除"停止":
public class MyActivity extends Activity {
private boolean isStarted = false;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
menu.removeItem(R.id.stop);
inflater.inflate(R.menu.mymenu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.start:
isStarted = true;
return true;
case R.id.stop:
isStarted = false;
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(isStarted) {
menu.removeItem(R.id.start);
menu.add(R.id.stop);
} else {
menu.removeItem(R.id.stop);
menu.add(R.id.start);
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
Fly*_*ing 96
对于这种类型的操作,我通常选择不改变菜单项,而只是隐藏你不需要的菜单项:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.findItem(R.id.start).setVisible(!isStarted);
menu.findItem(R.id.stop).setVisible(isStarted);
return true;
}
Run Code Online (Sandbox Code Playgroud)
i.s*_*rin 21
Flygenring答案是正确的,但menu.findItem()是滞后的,并且在onPrepareOptionsMenu(菜单菜单)中调用它会产生糟糕的用户体验.创建菜单时最好先获取MenuItem对象,然后每次在屏幕上显示菜单时调用setVisible:
MenuItem mDynamicMenuItem;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
// Get dynamic menu item
mDynamicMenuItem = menu.findItem(R.id.menu_item);
return true;
}
// Prepare the Screen's standard options menu to be displayed. This is called right
// before the menu is shown, every time it is shown. You can use this method to
// efficiently enable/disable items or otherwise dynamically modify the contents.
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// Here is just a good place to update item
mDynamicMenuItem.setVisible(isVisible);
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48698 次 |
| 最近记录: |