1

I'm using a click on the menu to open a bottom sheet.

When this was initially implemented just returning false from AppCompatActivity#onMenuOpened didn't do the job.

I see that someone already complained about this 5 years ago.

So I added a call to AppCompatActivity#closeOptionsMenu and it worked.

I updated my app to support API level 30 and now I noticed that it doesn't work. (Not sure if this is related to API 30, or if it broke earlier and I didn't notice)

This is the current code of AppCompatActivity#closeOptionsMenu

        ActionBar actionBar = getSupportActionBar();
        if (getWindow().hasFeature(Window.FEATURE_OPTIONS_PANEL)
                && (actionBar == null || !actionBar.closeOptionsMenu())) {
            super.closeOptionsMenu();
        }

and the result of actionBar.closeOptionsMenu() is true - i.e. super.closeOptionsMenu() isn't called. So I thought I would call the code in android.app.Activity#closeOptionsMenu directly

    public void closeOptionsMenu() {
        if (mWindow.hasFeature(Window.FEATURE_OPTIONS_PANEL) &&
                (mActionBar == null || !mActionBar.closeOptionsMenu())) {
            mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL);
        }
    }

but this call mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL); still didn't change things and the menu is still opened.

Any idea on how to fix this?

1 Answer 1

0

Instead of calling closeOptionsMenu inside onMenuOpened - I posted the close method to be called after onMenuOpened.

    public boolean onMenuOpened(int featureId, Menu menu) {
        // Make sure the menu won't open
        new Handler().post(this::closeOptionsMenu);

        openBottomSheetMenu();
        return false;
    }

And this solved the specific issue I had - I still see the menu for a sec, but then it's closed. I assume that it's wrong to call close while open is still running.

Still no sure why returning false didn't work

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.