Двойные обратные вызовы onMenuOpened/onPanel закрываются при каждом нажатии кнопки меню
В моем приложении для Android я хочу собирать статистику о том, когда (как часто) открывается и закрывается меню действий переполнения (три точки) (без выбора элемента). Для этой задачи я переопределил onMenuOpened
а также onPanelClosed
методы в пределах Activity
, Тем не менее, на всех устройствах (Android 4.4, 4.2; Samsung и HTC) я пробовал это до сих пор, эти методы запускаются дважды, каждый раз, когда меню открывается и закрывается. Это ошибка? Есть ли другой способ контролировать открытие и закрытие этого меню?
3 ответа
Вы можете попробовать это... я проверил это.... он отлично работает....
@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
}
});
У меня такой же вопрос, как и у вас, и я нашел более простой способ его решить:
При первом входе в onMenuOpened() меню становится пустым. Меню еще не подготовлено. Итак, вы можете проверить, как показано ниже
@Override
public boolean onMenuOpened(int featureId, Menu menu){
if(menu!=null){
//log something like firebaseLogEvent("Action", "onMenuOpened");
}
return true;
}
Обнаружил лучшее решение
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);
}
Вы можете собрать свою статистику в части "фокус" в операторе If.