2013-03-06 125 views
1

我有一個包含5個片段的活動。我正在使用支持庫中的FragmentPageAdapter來實現刷卡。片段菜單項在滑動時不能正確顯示,但會顯示在選項卡上 - 無菜單xml

Fragment4需要有一個額外的菜單項添加到操作欄。我可以得到這個工作正常,只有當用戶選擇標籤,並不刷卡。如果用戶滑動到選項卡,則附加菜單項不會一直顯示。從本質上講,當我滑動到Fragment3時,菜單項將顯示(因爲Fragment4的onCreateView被調用並存儲到內存中),當我滑動到Fragment4(想要獲得菜單項的那個)然後再次消失時,它會保持不變當我滑過Fragment5(它應該這樣做)。但是,除非我將所有內容全部掃描到Fragment2,然後繼續前進,否則它將保持不動。唯一的例外是,如果我至少有兩個碎片並選擇該選項卡,那麼它將正確顯示Fragment4的菜單項。

另外,如果它顯示Fragment3中的菜單項,因爲它正在執行時調用onCreate,爲什麼當它滑動到Fragment5時會消失?這是我的理解,FragmentPageAdapter有3個片段「加載」一次,以使平滑刷功能。

請參閱下面的代碼。

public View onCreateView(){ 
    .. 
    setHasOptionsMenu(true); 
    .. 
    return view; 
} 

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){ 
    SubMenu sub = menu.addSubMenu("Options"); 
    sub.add(0, EMAIL, 0, "Email"); 
    sub.add(0, FILTER, 0, "Filter"); 
    sub.add(0, SAVE, 0, "Save"); 
    sub.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
    setMenuVisibility(true); 
} 

如果我添加setMenuVisibility(true)onActivityCreated當以前的片段映入眼簾的,因爲這在技術上是當MyFragment.onActivityCreated被調用,這樣的話顯示菜單時爲正確選項卡和以前的選項卡菜單將顯示。但是,如果我滑過MyFragment選項卡,菜單消失,並且在刷回MyFragment選項卡或任何其他選項卡時不會再出現。文檔有關onCreateOptionsMenu指出

「這只是調用一次,第一次顯示選項菜單。要每次顯示時更新菜單,看到onPrepareOptionsMenu(菜單)。」 >

所以我嘗試添加

public void onPrepareOptionsMenu(Menu menu){ 
    setMenuVisibility(true); 
} 

,但它沒有任何效果可言。我很明顯錯過了這裏...這應該工作

編輯: 好吧,所以我越看越ActionBarSherlock,似乎越多似乎這種行爲只能使用該庫。它似乎不是任何Android版本的「本機」操作欄/ FragmentPagerAdapter行爲的一部分。任何人都可以證實這一點嗎?

回答

2

我遇到了同樣的問題,菜單圖標確實顯示在選項卡上,但不是在滑動。此解決方案爲我工作:

Click 請參閱johanols評論。

你的其他問題對我來說似乎很陌生。爲什麼不保留所有5個片段?

mViewPager.setOffscreenPageLimit(5); 

希望它能幫助:)

+0

那肯定有幫助。但是,我現在看到的問題是,一旦我開始向後滑動,菜單消失,因此,滑過包含菜單項的片段,然後再次返回。該點是爲實際項目創建的,但它不顯示.. – severine 2013-04-30 19:49:58

+0

經過更多測試後,我的問題在3個設備中的2個上得到解決,仍然無法在三星Galaxy Tab 2 10.1上運行「 – severine 2013-05-01 18:49:18