2015-03-13 72 views
1

所以我的問題是,是我有一個片段。該片段用於創建新對象和編輯現有對象。
當我創建一個新的對象時,我想要一個保存按鈕。當我編輯一個對象時,我也想要一個刪除按鈕。

我有兩個菜單佈局文件。這是
R.menu.element_actionbar_editAndroid選項菜單不會更改

R.menu.element_actionbar_add

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:yourapp="http://schemas.android.com/apk/res-auto"> 

<item android:id="@+id/action_save" 
    android:icon="@drawable/ic_action_done" 
    android:title="@string/save" 
    yourapp:showAsAction="always"/> 
</menu> 

當所有的動作片段被調用,它只是onCreateOptionsMenu。

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.element_actionbar_add, menu); 
    super.onCreateOptionsMenu(menu, inflater); 
} 

Eventhough我叫R.menu.add佈局仍然增加了兩個項目的動作條,它實際上膨脹的菜單中有兩個項目前。 這個片段是我現在實際使用菜單的唯一地方。

首先,我在選項create中添加了一個if語句,以檢查是否傳遞了一個現有的對象進行編輯,但是在這種情況下它確實顯示了正確的佈局,但是當沒有任何東西被傳遞時,我應該只獲取保存按鈕?

爲什麼它顯示錯誤的佈局,甚至沒有在其他地方指定它?編輯: 所以它的工作!

@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    if(currentObject==null) { 
     Global.ACTIVITY.getMenuInflater().inflate(R.menu.element_actionbar_add, menu); 
    }else{ 
     Global.ACTIVITY.getMenuInflater().inflate(R.menu.element_actionbar_edit,menu); 
    } 
    super.onPrepareOptionsMenu(menu); 
} 

首先使用onPrepare設置菜單也不起作用。我必須徹底刪除手機中的應用程序,然後重新安裝以使其正常工作。

+0

看看清潔項目(從Studio:Build - > Clean Project)是否有幫助。關於根據新/編輯對象顯示哪個菜單...根據對象膨脹不同的菜單文件,例如:'if(object == null){inflater.inflate(R.menu.element_actionbar_add,menu); else {inflater.inflate(R.menu.element_actionbar_edit,menu);}}' – 2015-03-13 14:57:57

回答

3
If you want your menus to change dynamically you should not 
use onCreateOptionMenu instead use onPrepareOptionMenus 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
    menu.clear(); 
    if(save){ 

    menu.add(0, ADD, 0, "Save"); 
    } 
    else{ 
     // add rest 
    } 
    return super.onPrepareOptionsMenu(menu); 
    } 

這種方法是每次點擊你的菜單按鈕,然後menu.clear()堪稱是因爲每次你添加一個菜單必須的。 實施後請分享您的結果。