Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android ContextMenu for View (Not Activity)

I am using the following method to add a ContextMenu to a custom view i have built but i want to know how to react to the press of that contextmenu.

This is not an Activity so i cannot do this:

  @override
  public boolean onOptionsItemSelected(MenuItem item) {

Here is the code

 private View.OnCreateContextMenuListener vC = new View.OnCreateContextMenuListener() {

    @Override
    public void onCreateContextMenu(ContextMenu arg0, View arg1,
            ContextMenuInfo arg2) {
        // TODO Auto-generated method stub
        arg0.add(0, 0, 0, "Call");
        arg0.add(0, 1, 0, "Map");
        arg0.add(0, 2, 0, "Market");


    }


};

Update:

Here is a very simplified verion of my class.

 public final class NewView extends View {



 public NewView(Context context, AttributeSet attrs) {
    super(context, attrs);
    cntxt = context;
    this.setLongClickable(true);
    this.setOnLongClickListener(vLong);
    this.setOnCreateContextMenuListener(vC);


 }

private View.OnLongClickListener vLong = new View.OnLongClickListener() {
    public boolean onLongClick(View view) {
        showContextMenu();
             return true;   
    }
 };  
 private View.OnCreateContextMenuListener vC = new View.OnCreateContextMenuListener() {

    @Override
    public void onCreateContextMenu(ContextMenu arg0, View arg1,
            ContextMenuInfo arg2) {
        // TODO Auto-generated method stub
        arg0.add(0, 0, 0, "Call");
        arg0.add(0, 1, 0, "Map");
        arg0.add(0, 2, 0, "Market");


    }

};


  } 
like image 301
Matt Avatar asked Apr 19 '26 01:04

Matt


2 Answers

Noone seem to answer exhaustively TS' question (and mine eventually), thus let me post a solution to this. Given the code above you can attach custom MenuItem's click handlers:

private View.OnCreateContextMenuListener vC = new View.OnCreateContextMenuListener() {

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {

        menu.add(0, 0, 0, "Call")
                .setOnMenuItemClickListener(mMenuItemClickListener);
        menu.add(0, 1, 0, "Map")
                .setOnMenuItemClickListener(mMenuItemClickListener);
        menu.add(0, 2, 0, "Market")
                .setOnMenuItemClickListener(mMenuItemClickListener);

    }
};  

private OnMenuItemClickListener mMenuItemClickListener = new OnMenuItemClickListener() {

        @Override
        public boolean onMenuItemClick(MenuItem item) {

            switch (item.getItemId()) {
            case 0:
                // do "Call"
                return true;

            case 1:
                // do "Map"
                return true;

            case 2:
                // do "Market"
                return true;
            }

            return false;
        }
    };
};
like image 81
Pavel Netesa Avatar answered Apr 20 '26 16:04

Pavel Netesa


Use item.getItemId() and create switch and cases based on the number returned by getItemId()

Something like this.

 @override
  public boolean onOptionsItemSelected(MenuItem item) {

      switch(item.getItemId())
      {
         case 1:
               Log.i("FIRST ITEM: ", "CALL");
               break;
         case 2: 
                Log.i("2nd ITEM: ", "MAP");
                break;
          case 3:
               Log.i("3rd ITEM: ", "Market");
               break;
         default:
      }
}

I hope this is what you meant by reacting on menu items selection. :)

like image 31
Nikola Despotoski Avatar answered Apr 20 '26 15:04

Nikola Despotoski



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!