0

我的主要目标是根据 Activity 中的当前布局刷新选项菜单。当 R.layout.preweb 处于活动状态时,我不希望我的操作栏上的按钮,但是当 setContentView 更改为 R.layout.main 变为活动状态时,invalidateOptionsMenu 和膨胀。这是我现在拥有的:

private int mViewMode;

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

在我的整个活动中,以随机的方法,我有这个:

setContentView(R.layout.preweb);
mViewMode = 1;

//or somewhere else

setContentView(R.layout.main);
mViewMode = 2;
invalidateOptionsMenu();

所以基本上,每当 mViewMode 设置为 2 时,都会调用 invalidateOptionsMenu 然后 onCreateOptionsMenu 应该重新触发,并且 mViewMode 现在等于 2,然后我应该充气。但什么都没有发生——它永远不会膨胀。

这是怎么回事?有什么建议么?

4

1 回答 1

1

在使用 使菜单无效时invalidateOptionsMenu()onPrepareOptionsMenu(android.view.Menu)将调用方法,而不是onCreateOptionsMenu()。所以你需要重写这个方法,你需要编写代码来显示菜单项或隐藏菜单项。

例如

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    if (mViewMode == 2) {
        // Need to show menu items
        menu.findItem(R.id.menuitem1).setVisible(true);
        menu.findItem(R.id.menuitem2).setVisible(true);
    } else {
        // Need to hide menu items
        menu.findItem(R.id.menuitem1).setVisible(false);
        menu.findItem(R.id.menuitem2).setVisible(false);
    }      
    return true;
}

并且onCreateOptionsMenu()当您说 时不会被调用invalidateOptionsMenu(),因此无需false从那里返回。你总是需要从中返回true

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    return true; 
}
于 2015-01-08T05:05:41.327 回答