0

これは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_list)その前に、ListViewで あるメソッドを使用しましevent_listた。コンテキストメニューからアイテムをクリックしても、何も実行されず、トーストが表示されず、ログに記録されない理由がわかりません。 logcatに...item.getItemId()はOptionsMenuとContextManuで同じですか?..コードの何が問題なのかわかりません。

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 に答える