Двойные обратные вызовы 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.

Другие вопросы по тегам