如何在Android中将选项菜单添加到片断

我正在尝试从一组片断中将一个项目添加到选项菜单。 android

我建立了一个新的MenuFragment类,并将其扩展为但愿包含菜单项的片断。这是代码: web

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彷佛没法运行。 ide


#1楼

若是发现未调用onCreateOptionsMenu(Menu menu, MenuInflater inflater)方法,请确保从Fragment的onCreate(Bundle savedInstanceState)方法中调用如下方法: spa

setHasOptionsMenu(true)

#2楼

我遇到了一样的问题,个人片断是ViewPager的页面。 发生这种状况的缘由是,我在实例化FragmentPagerAdapter时使用的是子片断管理器,而不是活动支持片断管理器。 code


#3楼

我遇到了一样的问题,可是我认为最好总结一下并介绍使之正常工做的最后一步: xml

  1. 在片断的onCreate(Bundle savedInstanceState)方法中添加setHasOptionsMenu(true onCreate(Bundle savedInstanceState)方法。 webview

  2. 在Fragment中重写onCreateOptionsMenu(Menu menu, MenuInflater inflater) (若是要在Fragment菜单中执行其余操做)和onOptionsItemSelected(MenuItem item)方法。 get

  3. onOptionsItemSelected(MenuItem item)活动的方法内,请确保当将在onOptionsItemSelected(MenuItem item) Fragment的方法中实施菜单项操做时,返回false。 it

一个例子: io

活动

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return true;
}

@Override
public 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);
    ....
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // Do something that differs the Activity's menu here
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public 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;
}

#4楼

若是您须要menu来刷新特定Fragment内的webview ,则可使用:

片断

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

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    // TODO Add your menu entries here
    inflater.inflate(R.menu.menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.exit:
        System.exit(1);
        break;

    case R.id.refresh:
        webView.reload();
        break;
    }
    return true;

}

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/exit" android:title="Exit" android:icon="@drawable/ic_action_cancel" />
    <item android:id="@+id/refresh" android:title="Refresh" android:icon="@drawable/ic_action_refresh" />
</menu>

#5楼

在建立片断视图以后设置选项菜单对我来讲效果很好。

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setHasOptionsMenu(true);        
}
相关文章
相关标签/搜索