按下每个菜单按钮上的双重回调onMenuOpened / onPanelClosed

时间:2014-05-25 20:48:21

标签: android android-actionbar overflow-menu

在我的Android应用程序中,我想收集关于溢出(三个点)操作栏菜单何时(多久)打开和关闭(没有选择项目)的统计数据。对于此任务,我在onMenuOpened内覆盖了onPanelClosedActivity方法。但是,在所有设备(Android 4.4,4.2;三星和HTC)上,到目前为止,我已尝试过这两种方法,每次打开和关闭菜单时都会触发这两种方法。 这是一个错误吗?是否有其他方法可以监控此菜单的打开和关闭?

3 个答案:

答案 0 :(得分:6)

你可以尝试这个...我已经测试过了......它的工作完美......

@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
        }
    });

答案 1 :(得分:4)

我和你有同样的问题,并找到一种更简单的解决方法:

第一次进入onMenuOpened()时,菜单为空。菜单尚未准备好。所以,你可以查看如下

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

}

答案 2 :(得分:0)

发现了更好的解决方案

    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语句的“焦点”部分收集统计信息。