首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段Menuitem单击

片段Menuitem单击
EN

Stack Overflow用户
提问于 2018-10-19 18:44:04
回答 1查看 51关注 0票数 0
代码语言:javascript
复制
   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:

代码语言:javascript
复制
<item
android:title="selectColor"
android:icon="@drawable/addcolor"
app:showAsAction="always"
android:id="@+id/color_menu"></item>

主活动菜单xml总是显示在每个片段上。

代码语言:javascript
复制
<item
android:title="menu"
android:icon="@drawable/menu"
app:showAsAction="always"
android:id="@+id/uper_menu"></item>

主活动菜单java代码在项目上打开一个对话框

代码语言:javascript
复制
   @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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-19 19:08:56

如果您自己处理事件,则不应该调用超类‘onOptionsItemSelected()’。因此,将您的方法更改为:

代码语言:javascript
复制
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),系统就不再要求片段了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52898272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档