invalidateOptionsMenu()不适用于AppCompatActivity

时间:2015-08-12 02:39:58

标签: android android-menu appcompat-v7-r22.1

我将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。

3 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:1)

我使用最新的支持库测试,它再次正常工作。

com.android.support:appcompat-v7::23.0.1

答案 2 :(得分:0)

更改你的onOptionsItemSelected,如下所示:

alert((x * 100).toPrecision(4));