Double callbacks onMenuOpened/onPanelClosed on eac

2019-06-17 18:56发布

问题:

In my Android app I want to collect statistics on when (how often) the overflow (three dots) action bar menu is opened and closed (without an item being selected). For this task I have overriden onMenuOpened and onPanelClosed methods within an Activity. However, on all the devices (Android 4.4, 4.2; Samsung and HTC) I've tried this so far these methods are triggered twice, each time the menu is opened and closed. Is this a bug? Is there another way to monitor this menu opening and closing?

回答1:

you can try this...i have tested it ....it works perfect....

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    Activity activity = getActivity();
    activity.getActionBar().addOnMenuVisibilityListener(new OnMenuVisibilityListener() {
    @Override
        public void onMenuVisibilityChanged(boolean isVisible) {
            // TODO Auto-generated method stub
            //you can check the isVisible boolean to check
            // if the overFlowMenu is visible or not
        }
    });


回答2:

I got the same question as you, and find an easier way to solve it:

When the first time it enters onMenuOpened(), menu is null. The menu is not prepared yet. So, you can check as below

@Override
public boolean onMenuOpened(int featureId, Menu menu){
    if(menu!=null){
       //log something like firebaseLogEvent("Action", "onMenuOpened");
    }
    return true;

}


回答3:

Discovered a better solution

    public boolean onPrepareOptionsMenu(Menu menu) {
      if (hasWindowFocus ()) {
        // gets called every time user taps on menu
        Log.v(TAG, "onPrepareOptionsMenu - focus");
      } else {
        // gets called when menu is being initialized
        Log.v(TAG, "onPrepareOptionsMenu - NO FOCUS");
      }
      return super.onPrepareOptionsMenu(menu);
    }

You can collect you stats in the "focus" part of the If statement.