- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我自己的名为 MainActivity
的 ActionBarActivity
中管理一些 Fragment
。一次显示一个 Fragment
。这个例子应该很简单。正在显示的 Fragment
在特定条件下应该有一个选项菜单。
这是我的代码:
public class MainActivity extends ActionBarActivity{
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// The certain conditions. You might know the background. ;-)
final boolean hasMenu = mNavigationDrawer.isDrawerOpen() ? false : true;
// The reference to the fragment which is shown
mCurrentShownFragment.setHasOptionsMenu(hasMenu);
return super.onCreateOptionsMenu(menu);
}
...
}
因为 mCurrentShownFragment.setHasOptionMenu(true)
MainActivity
和 Fragment
的 onCreateOptionMenu(... )
被调用了两次。
第一个问题:为什么?
第二个问题:可以吗?
第三题:如果第二题的答案是假的。我该如何防止这种情况发生?
最好的问候,巴洛克
最佳答案
看一下setHasOptionsMenu
的源码:
public void setHasOptionsMenu(boolean hasMenu) {
if (mHasMenu != hasMenu) {
mHasMenu = hasMenu;
if (isAdded() && !isHidden()) {
mActivity.supportInvalidateOptionsMenu();
}
}
}
它调用 supportInvalidateOptionsMenu()
:
public void supportInvalidateOptionsMenu() {
if (android.os.Build.VERSION.SDK_INT >= HONEYCOMB) {
// If we are running on HC or greater, we can use the framework
// API to invalidate the options menu.
ActivityCompatHoneycomb.invalidateOptionsMenu(this);
return;
}
mOptionsMenuInvalidated = true;
}
调用 invalidateOptionsMenu(this)
:
public void invalidateOptionsMenu () Added in API level 11
Declare that the options menu has changed, so should be recreated. The
onCreateOptionsMenu(Menu)
method will be called the next time it needs to be displayed.
所以它调用 onCreateOptionsMenu
是绝对正常的,因为这就是 setHasOptionsMenu
的工作方式
关于android - 为什么 Activity 的方法 onCreateOptionMenu() 通过使用 setHasOptionMenu(true) 来调用它的 Fragments 两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30071161/
我在我自己的名为 MainActivity 的 ActionBarActivity 中管理一些 Fragment。一次显示一个 Fragment。这个例子应该很简单。正在显示的 Fragment 在特
我是一名优秀的程序员,十分优秀!