我将我的Activity
改为了AppCompatActivity
,现在在onOptionsItemSelected()
中调用invalidateOptionsMenu()
不再像之前一样更新菜单项。 onPrepareOptionsMenu()
没有被调用。
我添加了以下依赖:
compile "com.android.support:appcompat-v7:22.2.1"
我将我的Activity
更新为AppCompatActivity
(请注意,在onResume()
中只有第一次调用invalidateOptionsMenu()
有效,而其他两个则无效):
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。
appcompat-v7
的源码中,invalidateOptionsMenu()
和supportInvalidateOptionsMenu()
执行的是相同的功能:https://github.com/android/platform_frameworks_support/blob/master/v7/appcompat/src/android/support/v7/app/AppCompatActivity.java#L186 - Ryan RActionBarActivity
被弃用后,使用AppCompatAcitivity
取而代之时,可能发生了一些变化。也许这是appcompat-v7
库或Android M的一个错误。 - Ryan R