片段菜单项请点击

时间:2018-10-19 18:44:05

标签: android android-studio android-fragments

   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;
}

1 个答案:

答案 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),则系统不再询问该片段。