猿问
下载APP

片段中的Android选项菜单

我试图从一组片段添加一个项目到选项菜单。


我创建了一个新MenuFragment类,并为我希望包含菜单项的片段扩展了这个。这是代码:


public class MenuFragment extends Fragment {


    MenuItem fav;


    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setHasOptionsMenu(true);

    }


    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

        fav = menu.add("add");

        fav.setIcon(R.drawable.btn_star_big_off);

    }

}

由于某种原因,onCreateOptionsMenu似乎没有运行。


30秒到达战场
浏览 48回答 3
3回答

ITMISS

调用超级方法:@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setHasOptionsMenu(true);}@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {    // TODO Add your menu entries here    super.onCreateOptionsMenu(menu, inflater);}将日志语句放在代码中以查看是否未调用该方法,或者您的代码是否未修改该菜单。此外,还要确保您呼叫setHasOptionsMenu(boolean)的onCreate(Bundle)通知,它应该参与选项菜单处理的片段。

jeck猫

我遇到了同样的问题,但我认为最好总结一下并介绍最后一步让它运转起来:在Fragment的onCreate(Bundle savedInstanceState)方法中添加setHasOptionsMenu(true)方法。onCreateOptionsMenu(Menu menu, MenuInflater inflater)在片段中覆盖(如果你想在Fragment的菜单中做一些不同的事情)和onOptionsItemSelected(MenuItem item)方法。在onOptionsItemSelected(MenuItem item)Activity的方法中,确保在onOptionsItemSelected(MenuItem item)Fragment的方法中实现菜单项操作时返回false 。一个例子:活动@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    MenuInflater inflater = getSupportMenuInflater();    inflater.inflate(R.menu.main, menu);    return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    switch (item.getItemId()) {        case R.id.activity_menu_item:            // Do Activity menu item stuff here            return true;        case R.id.fragment_menu_item:            // Not implemented here            return false;        default:            break;    }    return false;}分段public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setHasOptionsMenu(true);    ....}@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {    // Do something that differs the Activity's menu here    super.onCreateOptionsMenu(menu, inflater);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    switch (item.getItemId()) {        case R.id.activity_menu_item:            // Not implemented here            return false;        case R.id.fragment_menu_item:            // Do Fragment menu item stuff here            return true;        default:            break;    }    return false;}

翻翻过去那场雪

如果您需要menu刷新webview特定内部Fragment,可以使用:片段:public void onCreate(Bundle savedInstanceState) {&nbsp; &nbsp; super.onCreate(savedInstanceState);&nbsp; &nbsp; setHasOptionsMenu(true);}@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {&nbsp; &nbsp; // TODO Add your menu entries here&nbsp; &nbsp; inflater.inflate(R.menu.menu, menu);&nbsp; &nbsp; super.onCreateOptionsMenu(menu, inflater);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {&nbsp; &nbsp; switch (item.getItemId()) {&nbsp; &nbsp; case R.id.exit:&nbsp; &nbsp; &nbsp; &nbsp; System.exit(1);&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; case R.id.refresh:&nbsp; &nbsp; &nbsp; &nbsp; webView.reload();&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; }&nbsp; &nbsp; return true;}menu.xml文件<menu xmlns:android="http://schemas.android.com/apk/res/android">&nbsp; &nbsp; <item android:id="@+id/exit" android:title="Exit" android:icon="@drawable/ic_action_cancel" />&nbsp; &nbsp; <item android:id="@+id/refresh" android:title="Refresh" android:icon="@drawable/ic_action_refresh" /></menu>
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答