invalidateOptionsMenu() 不适用于 AppCompatActivity
invalidateOptionsMenu() does not work with AppCompatActivity
我将 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.
像下面这样更改您的 onOptionsItemSelected:
switch (item.getItemId()) {
case R.id.menu_starred_add:
isStopSaved = false;
invalidateOptionsMenu();
break;
case R.id.menu_starred_remove:
isStopSaved = true;
invalidateOptionsMenu();
break;
}
您应该调用 supportInvalidateOptionsMenu()
,这是为了与支持库一起工作。
我使用最新的支持库进行了测试,它又可以正常工作了。
com.android.support:appcompat-v7::23.0.1
我将 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.
像下面这样更改您的 onOptionsItemSelected:
switch (item.getItemId()) {
case R.id.menu_starred_add:
isStopSaved = false;
invalidateOptionsMenu();
break;
case R.id.menu_starred_remove:
isStopSaved = true;
invalidateOptionsMenu();
break;
}
您应该调用 supportInvalidateOptionsMenu()
,这是为了与支持库一起工作。
我使用最新的支持库进行了测试,它又可以正常工作了。
com.android.support:appcompat-v7::23.0.1