我来自https://developers.facebook.com/docs/android/scrumptious/authenticate
这是我的代码(与教程完全相同)的选项菜单部分
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// only add the menu when the selection fragment is showing
if (fragments[SELECTION].isVisible()) {
if (menu.size() == 0) {
settings = menu.add(R.string.settings);
}
return true;
} else {
menu.clear();
settings = null;
}
return false;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
if (item.equals(settings)) {
showFragment(SETTINGS, true);
return true;
}
return false;
}
发生什么事情大部分时间都有效,但我找到了一个我无法调试的测试用例。当您注销时,菜单项仍会显示,您必须单击它才能使其消失。(它不应该出现)。这对我来说并不是一件大事,但我发现当你点击菜单项后再次登录使其消失时,选项菜单根本不会出现。
答案 0 :(得分:0)
我想我发现了问题,我把它留给别人。从When and how often onPrepareOptionsMenu() method is called for ActionBar?,我得到了“在Android 3.0及更高版本上,当你想要更新菜单时,你必须调用invalidateOptionsMenu(),因为菜单总是打开。然后系统将调用onPrepareOptionsMenu()以便你可以更新菜单项。“ 当我退出时,即使没有实际的菜单项,菜单仍然是打开的。然而,当我点击菜单时它是空的,它搞砸了,所以当我登录时,显示将无法正常工作。我还不明白那部分。我希望有人可以详细说明那部分期间发生的事情