如何在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);        
}
相關文章
相關標籤/搜索