问题
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.
来源:https://stackoverflow.com/questions/23859826/double-callbacks-onmenuopened-onpanelclosed-on-each-menu-button-press