2015-03-13 66 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()堪称是因为每次你添加一个菜单必须的。 实施后请分享您的结果。