在片段中创建选项菜单

时间:2015-06-28 06:59:33

标签: android android-fragments android-optionsmenu

我有一个主要活动以及3个片段。我正在使用导航抽屉选择这些片段。我想根据当前显示的片段编辑操作栏中的溢出菜单选项。 例如: 如果现在显示片段A,我想在溢出按钮下有编辑,注销和设置选项。如果现在选择片段B,我应该只有那里的设置。

我尝试使用不同的xml覆盖主活动中的onCreateOptionsMenu(),并且使用不同的xml覆盖片段,但它没有帮助,因为只显示了主活动中的选项。

在主要活动中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    //return true;
    return super.onCreateOptionsMenu(menu);
}

在片段A中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getActivity().getMenuInflater().inflate(R.menu.menu1, menu);
    //return true;
    return true;
}

main.xml中

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_signout"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Sign Out"/>

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
</menu>

menu1.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_edit"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Edit Profile"/>
    <item
        android:id="@+id/action_signout"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Sign Out"/>

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>    
</menu>

2 个答案:

答案 0 :(得分:0)

在片段setHasOptionsMenu(true)中调用onCreate()

  

<强> public void setHasOptionsMenu (boolean hasMenu)

     

报告此片段想参与填充   通过接收对onCreateOptionsMenu的调用选项菜单(菜单,   MenuInflater)和相关方法。

     

如果hasMenu 为真,则片段包含要提供的菜单项。

要隐藏特定的MenuItem,您可以在setVisible(false)中为其调用onPrepareOptionsMenu()。例如:

@Override
public void onPrepareOptionsMenu(Menu menu) {

    //Hides MenuItem action_edit
    menu.getItem(R.id.action_edit).setVisible(false);
}

答案 1 :(得分:0)

要覆盖选项菜单,您应该使用setHasOtionsMenu(true)和

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return false;
    }

就是这样

相关问题