我正在尝试从一组片断中将一个项目添加到选项菜单。 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); }