菜单未在片段中显示

1 android menu android-fragments

我正在努力实现这样的目标

我的要求很简单,我想在片段中打开菜单项列表。因此,我在菜单内创建了菜单 XML,并尝试在 Fragment 的onCreateOptionsMenu 方法内进行膨胀,但不幸的是没有显示任何内容。

这是:

myFragment.java

public static MoreFragment newInstance() {
        return new MoreFragment();
    }


    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        menu.clear();
        inflater.inflate(R.menu.more_drawer, menu);

    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        setHasOptionsMenu(true);
        View v = inflater.inflate(R.layout.fragment_more, container, false);

        setUp(v);

        return v;
    }
Run Code Online (Sandbox Code Playgroud)

这是 more_drawer.xml:

 <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="@+id/nav_busTracking"
            android:icon="@drawable/ic_more_drawer_bus_tracking"
            android:title="Bus Tracking" />
        <item
            android:id="@+id/nav_kidsWallet"
            android:icon="@drawable/ic_more_drawer_kids_wallet"
            android:title="Kids' Wallet" />

        <item
            android:id="@+id/nav_circlals"
            android:icon="@drawable/ic_more_drawer_circulars"
            android:title="Circulars" />

        <item
            android:id="@+id/nav_message"
            android:icon="@drawable/ic_more_drawer_messages"
            android:title="Messages" />

        <item
            android:id="@+id/nav_accountSettingd"
            android:icon="@drawable/ic_more_drawer_account_settings"
            android:title="@string/account_settings" />

        <item
            android:id="@+id/nav_logout"
            android:icon="@drawable/ic_more_drawer_logout"
            android:title="Log Out" />

    </menu>
Run Code Online (Sandbox Code Playgroud)

片段.xml:

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


</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我尝试将setHasOptionsMenu(true) 放入 onCreate() 和 onCreateView() 中,但没有显示任何内容。

我尝试调试并发现onCreateOptionsMenu()没有被调用。我尝试了为这个问题提供的所有解决方案,但没有任何结果对我有利。

我究竟做错了什么?

ʍѳђ*_*ઽ૯ท 5

改变这个:

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        menu.clear();
        inflater.inflate(R.menu.more_drawer, menu);

    }
Run Code Online (Sandbox Code Playgroud)

到:

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

    }
Run Code Online (Sandbox Code Playgroud)

并使用:setHasOptionsMenu(true);在视图膨胀创建之后:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    setHasOptionsMenu(true);
}
Run Code Online (Sandbox Code Playgroud)

  • 这是 Fragment 的完整代码吗?如果没有的话,你会把它全部贴出来吗?另外,尝试在“View v = inflater.inflate”之后添加“setHasOptionsMenu(true);”。它应该适用于这些变化。 (2认同)