lemoncodes
lemoncodes

Reputation: 2421

Android: ContextMenu and ItemSelected in Context Menu

This is the onCreate and oncontextitemslected code

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

and before that is i used the method registerForContextMenu(event_list) where event_list is a ListView , no i don't know why when ever i click an item from the context menu, it doesn't do anything, it won't show the toast and won't log into the logcat... is the item.getItemId() same for OptionsMenu and ContextManu?.. i don't know what is wrong with my code..

PS the context menu is called inside a dialog box in a listview

Upvotes: 0

Views: 1719

Answers (2)

erdomester
erdomester

Reputation: 11829

Here is your solution, if you don't mind creating the menu items in your class. The keyword was definitely your PS, meaning your listview is in a dialog.

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

You do not even need the onContextItemSelected method.

Upvotes: 1

Nick
Nick

Reputation: 9373

You need to return true in the onCreateOptionsMenu as detailed in the documentation:

Returns

You must return true for the menu to be displayed; if you return false it will not be shown.

So you can chacnge your code to this:

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

UPDATE:

I have things return on the options menu with a switch case in a onOptionsItemSelected vs onContextItemSelected

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

The icons and ids are in my menu.xml

Upvotes: 0

Related Questions