我将Activity
切换为AppCompatActivity
,现在在invalidateOptionsMenu()
中调用onOptionsItemSelected()
不再像之前那样更新菜单项。 onPrepareOptionsMenu()
未被调用。
我添加了以下依赖
compile "com.android.support:appcompat-v7:22.2.1"
并将我的Activity
更新为AppCompatActivity
(请注意invalidateOptionsMenu()
中仅onResume()
的第一次通话,其他两次不通知):
public class MyActivity extends AppCompatActivity {
private boolean isStopSaved;
// ...
@Override
protected void onResume() {
super.onResume();
if (/* Check DB if star should be set */) {
isStopSaved = true;
} else {
isStopSaved = false;
}
invalidateOptionsMenu(); // This updates the menu as expected
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// ...
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_schedule, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_starred_add:
isStopSaved = true;
invalidateOptionsMenu(); // Does not update menu
break;
case R.id.menu_starred_remove:
isStopSaved = false;
invalidateOptionsMenu(); // Does not update menu
break;
}
return super.onOptionsItemSelected(item);
}
修改:我的设备正在运行Android M预览2。
答案 0 :(得分:15)
您应该调用supportInvalidateOptionsMenu()
,这是为了与支持库一起使用。
答案 1 :(得分:1)
我使用最新的支持库测试,它再次正常工作。
com.android.support:appcompat-v7::23.0.1
答案 2 :(得分:0)
更改你的onOptionsItemSelected,如下所示:
alert((x * 100).toPrecision(4));