我正在嘗試從一組片斷中將一個項目添加到選項菜單。 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
若是發現未調用onCreateOptionsMenu(Menu menu, MenuInflater inflater)
方法,請確保從Fragment的onCreate(Bundle savedInstanceState)
方法中調用如下方法: spa
setHasOptionsMenu(true)
我遇到了一樣的問題,個人片斷是ViewPager的頁面。 發生這種狀況的緣由是,我在實例化FragmentPagerAdapter時使用的是子片斷管理器,而不是活動支持片斷管理器。 code
我遇到了一樣的問題,可是我認爲最好總結一下並介紹使之正常工做的最後一步: xml
在片斷的onCreate(Bundle savedInstanceState)
方法中添加setHasOptionsMenu(true onCreate(Bundle savedInstanceState)
方法。 webview
在Fragment中重寫onCreateOptionsMenu(Menu menu, MenuInflater inflater)
(若是要在Fragment菜單中執行其餘操做)和onOptionsItemSelected(MenuItem item)
方法。 get
在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; }
若是您須要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 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>
在建立片斷視圖以後設置選項菜單對我來講效果很好。
@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); }