我正在尝试从一组片段中将一个项目添加到选项菜单。
我创建了一个新的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似乎无法运行。
#1楼
如果发现未调用onCreateOptionsMenu(Menu menu, MenuInflater inflater)方法,请确保从Fragment的onCreate(Bundle savedInstanceState)方法中调用以下方法:
setHasOptionsMenu(true)
#2楼
我遇到了同样的问题,我的片段是ViewPager的页面。 发生这种情况的原因是,我在实例化FragmentPagerAdapter时使用的是子片段管理器,而不是活动支持片段管理器。
#3楼
我遇到了同样的问题,但是我认为最好总结一下并介绍使之正常工作的最后一步:
在片段的onCreate(Bundle savedInstanceState)方法中添加setHasOptionsMenu(true onCreate(Bundle savedInstanceState)方法。
在Fragment中重写onCreateOptionsMenu(Menu menu, MenuInflater inflater) (如果要在Fragment菜单中执行其他操作)和onOptionsItemSelected(MenuItem item)方法。
在onOptionsItemSelected(MenuItem item)活动的方法内,请确保当将在onOptionsItemSelected(MenuItem item) Fragment的方法中实施菜单项操作时,返回false。
一个例子:
活动
@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
#5楼
在创建片段视图之后设置选项菜单对我来说效果很好。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}