2012-04-10 73 views
3

我有兩個片段,一個ListView和一個「細節」視圖。每個片段都有自己的菜單選項。當處於橫向模式下,顯示兩個片段時,每個菜單都合併爲一個(我假設是按設計),但是如果將設備旋轉到縱向,則菜單保持合併狀態,並顯示不應該顯示的選項在那裏。不知道是否需要在我的問題中包含任何代碼。處理片段菜單選項

編輯:

發現這個question,但加入menu.clear()只給出了詳細的菜單選項查看,在景觀和變回肖像時,菜單不會改變。

我想更大的問題是如何處理碎片,每個碎片都有自己的一組菜單選項。

更新:

需要明確的是,如果該設備在肖像或風景模式,左側菜單做工精細。從橫向旋轉到縱向時發生問題,反之亦然。即使調用onCreateOptionsMenu,菜單似乎也不會重置。

回答

1

如果您使用的是setRetainInstance(true),則認爲該問題不會刷新。不幸的是,在改變方向時,除去這個中斷,其他事情(比如我的AsyncTask)就會被終止。

2

我是新來的,所以我很抱歉,如果我沒有格式化所有的頂尖。我也有類似的問題關於菜單貢獻和Fragment s。這是我在我的實例...

我有一個FragmentActivity託管ListFragment和一個額外的Fragment包含所選清單項的細節 - 非常典型的平板電腦配置。此附加詳細信息Fragment不會添加,直到選擇列表項目...當我選擇一個列表項目時,我想阻止ListFragment的菜單項目對主機FragmentActivity操作欄作出貢獻。 (從用戶界面的角度來看,用戶主要關注的是新添加的片段,爲了返回到之前的狀態,他們取消選擇他們選擇的項目。)由於ListFragment不應該知道其他片段以確保可重用性,我發現利用onPrepareOptionsMenu(..)方法在FragmentActivity級別是我的正確方法。

將此片段代碼添加到託管FragmentActivity以快速獲取所需的行爲;

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
    // 'Find' the menu items that should not be displayed - each Fragment's menu has been contributed at this point. 
    menu.findItem(id.sync).setVisible(false); 
} 
return super.onPrepareOptionsMenu(menu); 
} 

這種方法意味着你的碎片殘留可重複使用(他們仍然貢獻爲最初設計),但您的主機FragmentActivity可以操縱活動UI是獲得了授權的角色是一個。

我希望有幫助。

相關問題