Android中所有活动的选项菜单相同

Android中所有活动的选项菜单相同,android,menu,option,Android,Menu,Option,我的项目中有10-15项活动。我希望在所有活动中都有选项菜单。然后是他们的任何方式,我们可以在一个地方做到这一点,它出现在所有的活动 此外,我还想在某些情况下隐藏选项菜单。那么,是否有可能,或者我必须在所有活动中编写选项菜单代码 问候 Sunil创建一个扩展活动的类(比如BaseActivity),并覆盖onCreateOptions菜单和onOptions项Selected函数 public class BaseActivity extends Activity { // Activ

我的项目中有10-15项活动。我希望在所有活动中都有选项菜单。然后是他们的任何方式,我们可以在一个地方做到这一点,它出现在所有的活动

此外,我还想在某些情况下隐藏选项菜单。那么,是否有可能,或者我必须在所有活动中编写选项菜单代码

问候

Sunil

创建一个扩展活动的类(比如BaseActivity),并覆盖
onCreateOptions菜单
onOptions项Selected
函数

public class BaseActivity extends Activity {

    // Activity code here

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item:
                // do what you want here
                return true;
            default:
               return super.onOptionsItemSelected(item);
        }
    }
}
现在,在其他15-16个活动中,您应该扩展BaseActivity,而不是扩展活动

public class FooActivity extends BaseActivity { 

    // Activity code here

}
这样,您的所有活动都将派生“选项”菜单。对于要禁用选项菜单的活动,可以在该特定活动中再次覆盖它

public class BarActivity extends BaseActivity { 

    // Activity code here

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Do Nothing
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       // Do Nothing
   }
}

希望它不会在清单文件中给您带来问题。

解决此问题的方法是在您的新活动中添加此菜单方法

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_home_page, menu);
    menu.removeItem(R.id.logout);
    return true;
}
在每个活动中,此方法将自动显示

如果没有,则将其添加到
充气
呼叫中。它需要两个参数,一个xml资源(与您在原始活动中使用的相同),以及传递到
onCreateOptions菜单
方法的菜单对象

menu.removietem
将删除传递给它的任何资源id的菜单项。 我希望这能帮助那些面临这个问题的人


谢谢,很高兴分享这篇文章

仅扩展
BaseActivity
是不够的,您还必须在其他活动中调用
super.onCreateOptions菜单(菜单)
super.onOptions项Selected(项)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    //getMenuInflater().inflate(R.menu.menu_second, menu);  <- remove this
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
}
@覆盖
公共布尔onCreateOptions菜单(菜单){
super.onCreateOptions菜单(菜单);

//getMenuInflater().充气(右菜单菜单第二菜单);甚至我也考虑过,但我已经有了一个自定义活动,用于在所有活动中设置标题栏。我将尝试在其中实现它。是的,请这样做,它应该会起作用。同时报告您的结果。:)将起作用,除非您使用类似ListActivity的内容或从活动派生的其他内容。您必须制作自己的ListActivities在这种情况下,从BaseActivity派生。对我来说是有效的!尽管只扩展一个类的限制确实存在。BaseMenu是一个类还是一个活动?getMenuInflater()。充气(R.menu.menu_second,menu);//这会使optionMenu消失…?st0le的答案非常有效。我唯一的建议是,在不需要菜单的活动中,与其从BaseActivity类继承,不如从Activity继承。这样,就不必重写与菜单相关的方法。