How to handle onContextItemSelected in a multi fragment activity? How to handle onContextItemSelected in a multi fragment activity? android android

How to handle onContextItemSelected in a multi fragment activity?


I'll post an answer even though you found a workaround because I just dealt with a similar issue. When you inflate the context menu for a specific fragment, assign each menu item a groupId that is unique to the fragment. Then test for the groupId in 'onContextItemSelected.' For Example:

public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {    menu.add(UNIQUE_FRAGMENT_GROUP_ID, MENU_OPTION_1, 0, R.string.src1);    menu.add(UNIQUE_FRAGMENT_GROUP_ID, MENU_OPTION_2, 0, R.string.src2);}public boolean onContextItemSelected(MenuItem item) {    //only this fragment's context menus have group ID of -1    if (item.getGroupId() == UNIQUE_FRAGMENT_GROUP_ID) {        switch(item.getItemId()) {        case MENU_OPTION_1: doSomething(); break;        case MENU_OPTION_2: doSomethingElse(); break;    }}

This way all of your fragments will still receive calls to 'onContextItemSelected,' but only the correct one will respond, thus avoiding the need to write activity-level code. I assume a modified version of this technique could work even though you aren't using 'menu.add(...)'


Another one solution:

@Overridepublic boolean onContextItemSelected(MenuItem item) {    if (getUserVisibleHint()) {        // context menu logic        return true;    }    return false;}

Based upon this patch from Jake Wharton.


I liked the simple solution by Sergei G (based on Jake Wharton fix), but inverted because it is easier to add to several fragments:

public boolean onContextItemSelected(android.view.MenuItem item) {      if( getUserVisibleHint() == false )     {        return false;    }    // The rest of your onConextItemSelect code    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); }

After that, the code same as it was before.