0

这是 onCreate 和 oncontextitemsselected 代码

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

在此之前我使用了 ListView 的方法registerForContextMenu(event_list)event_list不,我不知道为什么当我从上下文菜单中单击一个项目时,它什么也不做,它不会显示 toast 也不会记录进入 logcat ... OptionsMenu 和 ContextManu 的 item.getItemId() 是否相同?.. 我不知道我的代码有什么问题..

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

4

2 回答 2

1

如果您不介意在课堂上创建菜单项,这是您的解决方案。关键字绝对是您的 PS,这意味着您的列表视图在对话框中。

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方法。

于 2012-08-11T14:30:21.427 回答
0

您需要在onCreateOptionsMenu中返回 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;
        }

更新:

我在选项菜单上返回了一些东西,在onOptionsItemSelectedvs中有一个开关盒onContextItemSelected

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

图标和 ID 在我的 menu.xml 中

于 2012-08-11T13:57:29.157 回答