36

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

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

问候

苏尼尔

4

4 回答 4

70

创建一个扩展 Activity 的类(比如BaseActivity),并覆盖onCreateOptionsMenuonOptionsItemSelected函数。

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,而不是扩展 Activity 。

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
   }
}

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

于 2010-07-17T04:28:01.727 回答
3

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_home_page, menu);
    menu.removeItem(R.id.logout);
    return true;
}

在每个活动中,此方法将自动出现。

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

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

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

于 2012-11-20T20:30:48.270 回答
1

仅扩展 是不够的,您还必须在其他活动中BaseActivity调用super.onCreateOptionsMenu(menu)并喜欢这样:super.onOptionsItemSelected(item)

@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);
}
于 2015-03-10T22:52:24.367 回答
0

这是 11 年前提出的问题,此后 Android 发生了很大变化。接受的答案有效,除了您必须扩展BaseActivityfromAppCompatActivity而不是 just Activity,否则您的菜单将不会显示。其余的代码完全没问题。

于 2022-03-04T11:40:18.347 回答