Android:上下文菜单和在上下文菜单中选择的项

Android:上下文菜单和在上下文菜单中选择的项,android,Android,这是onCreate和oncontextitemslected代码 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater();

这是onCreate和oncontextitemslected代码

@Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
    Toast toast;
        if(item.getItemId() == R.id.context_menu_edit)
        {
            Log.d("ContextCheck","EDIT!");
            toast = Toast.makeText(this, "Edit!", Toast.LENGTH_SHORT);
            toast.show();
        }

        if(item.getItemId() == R.id.context_menu_delete)
        {
            Log.d("ContextCheck","DELETE!");
            toast = Toast.makeText(this, "Delete!", Toast.LENGTH_SHORT);
            toast.show();
        }

        return super.onContextItemSelected(item);
    }
在此之前,我使用了方法
registerForContextMenu(event\u list)
其中
event\u list
是一个列表视图,不,我不知道为什么每次我从上下文菜单中单击一个项目时,它什么都不做,它不会显示toast,也不会登录到logcat。。。选项Menu和ContextManu的item.getItemId()是否相同?。。我不知道我的代码出了什么问题

PS
在列表视图的对话框中调用上下文菜单

您需要在中返回true,如文档中所述:

返回

必须返回true才能显示菜单;如果你 返回false将不显示它

因此,您可以将代码更改为:

@Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.context_menu, menu);
            return true;
        }
更新:

我在选项菜单上返回了一个开关盒,它位于
onoptionItemSelected
vs
onContextItemSelected

public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.emaildev:    
                    email();
                    break;
                case R.id.share:     
                    Share();
                    break;                      
            }
            return true;
        }

图标和ID都在我的菜单中。xml

如果您不介意在类中创建菜单项,这是您的解决方案。关键字肯定是你的PS,这意味着你的listview在一个对话框中

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
              super.onCreateContextMenu(menu, v, menuInfo);
              //MenuInflater inflater = getMenuInflater();
              //inflater.inflate(R.menu.context_menu, menu);

              MenuItem delete = menu.add("delete");
              MenuItem add = menu.add("add");
              add.setIcon(android.R.drawable.ic_menu_upload); //adding icons
              delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                      public boolean onMenuItemClick(MenuItem item) {
                          Log.d("ContextCheck","EDIT!");
                            Toast.makeText(Pr.this, "Edit!", Toast.LENGTH_SHORT).show();
                              return true;
                      }
              });
              add.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                  public boolean onMenuItemClick(MenuItem item) {
                      Log.d("ContextCheck","EDIT!");
                        Toast.makeText(Pr.this, "Edit!", Toast.LENGTH_SHORT).show();
                      return true;
                  }
          });
            }

你甚至不需要
onContextItemSelected
方法。

是的,尽管我没有返回true,但我仍然在上下文菜单上获得了选项,但当我单击上下文菜单中的项目时,它不会做任何事。顺便问一下,当某个内容无效时,你如何返回?是的,但是这些内容将如何在上下文菜单上实现,我的选项菜单很好用。。只是在我的ContextMenu上,当我单击ContextMenuse上的某个项时,我什么也不做。请参阅此帖子:,需要向onContextItemSelected方法添加一个int arg。我不明白,为什么你说需要在声明为void的方法中返回true?这不正确,与解决方案无关。请检查我编辑的答案。我让它和一个对话框一起工作。是的,它工作得很好!。。非常感谢你!。。但是有一个问题,为什么它不能与listview上对话框上下文的正常实现一起工作?…我想说onContextItemSelected可以用于顶级类,如活动,并且对话框是派生类。然而,根据开发人员的网站,包名是android.app.Activity和android.app.Dialog,所以我不知道。请删除你的第一条评论,因为它现在无关紧要。