invalidateOptionsMenu()不适用于AppCompatActivity

Rya*_*n R 2 android android-appcompat android-menu

我换我ActivityAppCompatActivity现在呼吁invalidateOptionsMenu()onOptionsItemSelected()不再更新菜单项,因为他们以前那样.onPrepareOptionsMenu()不叫.

我添加了以下依赖项

compile "com.android.support:appcompat-v7:22.2.1"
Run Code Online (Sandbox Code Playgroud)

并更新了我ActivityAppCompatActivity(注意只在第一次调用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);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我的设备正在运行Android M预览2.

nat*_*rio 15

您应该调用supportInvalidateOptionsMenu(),这是为了与支持库一起使用.

  • 从`appcompat-v7`源`invalidateOptionsMenu()`和`supportInvalidateOptionsMenu()`做同样的事情:https://github.com/android/platform_frameworks_support/blob/master/v7/appcompat/src/android/support/ V7 /应用/ AppCompatActivity.java#L186 (2认同)