2013-12-14 72 views
0

我有SherlockFragmentActivity與3片段和ViewPager之間滑動(除了ActionBar)。OnCreateOptionsMenu被稱爲錯誤的片段

每SherlockFragment都有自己的菜單,看起來像這樣:

public class MyFragment1 extends SherlockFragment { 
    private Menu menu; 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 
//... 
    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.fr1, menu); 
     super.onCreateOptionsMenu(menu, inflater); 
     this.menu = menu; 
    } 
//... 
} 

其他片段類看起來相似。

你知道,ViewPager在第一次活動啓動時實例化兩個片段。因此,首先執行第一個片段的OnCreateView(),然後執行第一個片段的OnCreateOptionsMenu(),然後執行第二個片段的OnCreateView(),然後執行第一個片段的再一次的OnCreateOptionsMenu()

請幫助,我需要了解我做錯了什麼。

+0

你如何處理菜單通貨膨脹? –

+0

@DanielBo你是什麼意思?在我的活動中,我保留默認的OnCreateOptionsMenu()實現。 –

+0

如何觸發onCreateOptionsMenu,或者viewpager如何知道何時膨脹另一個菜單?我每次調用我的選項菜單onPageSelected被調用,然後onCreateOptionsMenu然後告訴當前顯示的片段來膨脹它的菜單,就像一個魅力:) –

回答

0

如果viewpager由SherlockFragmentActivity託管,以確保我可以使演員和隨後呼叫:)

public void onPageSelected(int position) { 
    ... 
    if (context instanceof SherlockFragmentActivity) 
     ((SherlockFragmentActivity)context).supportInvalidateOptionsMenu(); 
} 

,你需要在上下文開始通貨膨脹onCreateOptionsMenu這樣的檢查:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    Fragment f = get your current Fragment 
    if (f != null && f instanceof SherlockFragment) 
      ((SherlockFragment)f).onCreateOptionsMenu(menu, getSupportMenuInflater()); 
    return super.onCreateOptionsMenu(menu); 
} 
+0

我會馬上嘗試) –

+0

現在我的菜單項目正在複製並與其他片段上的項目進行混合(( –

+0

)嗯,我想你以前的充氣過程除了新菜單外,這會導致菜單加倍:S –