2014-05-25 32 views
5

在我的Android應用程序中,我想收集有關溢出(三點)操作欄菜單何時(多久)打開和關閉的統計信息(沒有選擇項目)。對於此任務,我已覆蓋Activity內的onMenuOpenedonPanelClosed方法。然而,在所有設備上(Android 4.4,4.2;三星和HTC),我嘗試過這種方法,因此每次菜單打開和關閉時都會觸發這些方法兩次。 這是一個錯誤?是否有另一種方式來監視這個菜單的開啓和關閉?onMenuOpened/onPanel在每個菜單按鈕上關閉雙回調按

回答

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 
     } 
    }); 
+0

@Leo K:請投我的答案,如果u發現它有用 –

+0

請儘量提高你的答案的書寫。此外,評論代碼會有所幫助。 – fedorqui

+0

我打算接受你的回答。但是,我想補充一點,我之前嘗試過這種方法,並且導致了與我在問題中描述的相同的錯誤。但是,我在onCreateOptionsMenu中設置了監聽器,將監聽器設置爲onCreated而不是解決此問題。總之這種方法確實有效。 另外,我不確定你爲什麼建議使用isOverflowMenuOpen字段,但isVisible參數提供的信息並不是真的必要。 –

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語句的「焦點」部分。

1

我得到了同樣的問題,你,並找到解決它的一個更簡單的方法:

當第一次進入onMenuOpened(),菜單爲空。菜單尚未準備好。所以,你可以檢查如下

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

}