public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_fragement, menu);
super.onCreateOptionsMenu(menu, inflater);
}
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent = new Intent();
switch (item.getItemId()) {
case R.id.color_menu:
intent.setClass(rootView.getContext(), CandleColorActivity.class);
getActivity().startActivityForResult(intent,COLOR_ACTION);
break;
}
return super.onOptionsItemSelected(item);
}
使用上面的代码菜单项在片段中可见,但单击项不起作用。菜单项xml:
<item
android:title="selectColor"
android:icon="@drawable/addcolor"
app:showAsAction="always"
android:id="@+id/color_menu"></item>
主活动菜单xml始终显示在每个片段上
<item
android:title="menu"
android:icon="@drawable/menu"
app:showAsAction="always"
android:id="@+id/uper_menu"></item>
主活动菜单中的Java代码打开一个单击该项目的对话框
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.uper_menu:
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setView(R.layout.menu_dialog);
alertDialog = builder.show();
alertDialog.getWindow().setGravity(Gravity.BOTTOM);
alertDialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
alertDialog.getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
viewIds();
break;
default:
break;
}
return true;
}
答案 0 :(得分:2)
如果您自己处理事件,则不应调用超类'onOptionsItemSelected()
。因此,将您的方法更改为此:
public boolean onOptionsItemSelected(MenuItem item) {
...
switch (item.getItemId()) {
case R.id.color_menu:
...
return true;
default:
return super.onOptionsItemSelected(item);
}
}
编辑
在片段和活动中,如果您处理了事件,则仅返回true,否则返回super.onOptionsItemSelected(item);
原因是,系统首先要求活动处理该事件,并且如果活动说它确实处理了该事件(通过返回true),则系统不再询问该片段。