2015-06-15 21 views
3

我學習Android和我有點不確定菜單選項work.Here是怎麼設置我有,當我們將它們添加到片段和主要活動中時,選項菜單的流程如何?

我有內部具有片段的主要活動。主要活動的onCreateOptionsMenu看起來像這樣

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

這menu_main.xml只是有設置按鈕。我本來是要在該片段中添加一個刷新按鈕,所以我創建了一個新的菜單XML和片段中的類

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.tempfragment, menu); 
} 

添加該代碼。當我跑的應用程序,並做了長按,我看到都刷新和設置按鈕。

我的問題是,當我們有主要活動和其相關片段的菜單選項時,流程如何?它是否結合了這兩個菜單?我可以看到它正在合併,但我不確定它是如何在內部處理的?有人可以向我解釋這個嗎?

編輯 下面是片段

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" > 

<item android:id="@+id/action_refresh" android:title="action_refresh" 
    app:showAsAction="never" 
    /> 
</menu> 

回答

1

菜單文件如果你有一個MainActivity是膨脹的選項菜單,menu_main.xml,則該選項菜單會一直出現在該MainActivity創建的任何片段。

在每個片段代碼中,您可以爲該特定片段創建選項菜單。假設您在FriendsFragment中充氣menu_friends.xml。當FriendsFragment的實例由MainActivity創建時,將顯示menu_main.xmlmenu_friends.xml。您可以對所有片段重複此操作。

編輯:@Kartheek對於在取消活動菜單的片段中調用setHasOptionsMenu(true)的回答不正確。該聲明所做的是允許通過該片段創建菜單。 菜單將包括在內。在這裏看到: Calling setHasOptionsMenu(true) from a fragment results in multiple calls to onCreateOptionsMenu in Activity

+0

所以,如果我理解正確的話,只要主要活動是開放的,它的菜單選項將沿着其片段與菜單選項可見,但是我們打開另一個活動從main_activity,那麼其他活動的選項菜單將替換主活動的選項菜單。這是正確的嗎?: – Dude

+0

沒錯! – McGuile

1

當我們對主要活動和一個與其相關的 片段的菜單選項?

如果你的片段已被稱爲setHasOptionsMenutrue然後onCreateOptionsMenu會在你的片段,並在您的activity.It實際結合ActivityFragment的菜單項被調用。

它結合了兩個菜單嗎?

是。它將兩者結合在一起顯示出來。

有人可以向我解釋這一點嗎?

您可以從Activity子類或Fragment子類中聲明選項菜單的項目。如果您的活動和片段都爲選項菜單聲明瞭項目,則它們將合併到UI中。活動的項目首先出現,然後按照每個片段添加到活動的順序排列每個片段的項目。如有必要,您可以重新排列菜單項,並在需要移動的每個<item>中使用android:orderInCategory屬性。

如果您的活動包含片段,系統會首先調用onOptionsItemSelected(),然後針對每個片段(按每個片段的添加順序)調用onOptionsItemSelected(),直到某個片段返回true或調用了所有片段。

+0

但對我來說,它顯示在我的最終用戶界面中,下面的McGuile答案也表示它將顯示兩個選項菜單 – Dude

+0

默認情況下,每個menu.xml都有設置按鈕。我想你沒有刪除它。 – Kartheek

+0

我不認爲是這樣。我更新了我的menu.xml類的片段的問題。正如你可以看到它只有一個項目。 – Dude

1

Dont forgent主要活動包含碎片,並且操作欄在活動中,所以如果您更改碎片,它不會像您更改活動... 因爲它的操作欄沒有改變,它只是在你已經在活動中的動作欄和你在片段中的動作欄之間進行組合。

希望它的幫助你:)

相關問題