Estoy tratando de crear un menú contextual para la vista de tarjeta. Menú inicial como fig 1: menú contextual inicial

enter image description here

Y necesito reemplazarlo como fig 2: menú contextual reemplazado

enter image description here

Cuando hago clic en el menú deshabilitar, la vista de la tarjeta se deshabilitará, y el menú deshabilitar debe reemplazarse con el menú habilitar

0
soundarya 6 abr. 2017 a las 09:47

2 respuestas

La mejor respuesta

Llame invalidateOptionsMenu () después de hacer clic en el elemento del menú para cambiar el título del elemento del menú.

Boolean IsEnable = false;

@Override
public boolean onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuItem reminderstatus = (MenuItem) menu.findItem(R.id.reminderstatus);
    if (IsEnable) {
        reminderstatus.setTitle("Disable");
    } else {
        reminderstatus.setTitle("Enable");
    }
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    return super.onContextItemSelected(item);
    if (item.getItemId() == R.id.reminderstatus) {
        if (IsEnable) {
            IsEnable = false;
        } else {
            IsEnable = true;
        }
        invalidateOptionsMenu();
    }
}
1
9spl 6 abr. 2017 a las 09:35

En realidad, no necesita crear un elemento de menú diferente para habilitar y deshabilitar, tome un solo elemento de menú, solo cambie el texto del elemento de menú, desde su estado (habilitar o deshabilitar). Espero que esté guardando el estado que actualmente es Activar o Desactivar.

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

    // Select a menu item then change it's title (text)
    MenuItem mi = (MenuItem) menu.findItem(R.id.YOUR_MENU_ID);
    if(CHECK_YOUE_CURRENT_STATUS_HERE){

      //SET YOUR CURRENT STATUS ACCORDINGLY CURRENT STATUS (ENABLE /DISABLE)
      mi.setTitle("Enable/Disable");

    }
}
@Override
public boolean onContextItemSelected(MenuItem item) {
    return super.onContextItemSelected(item);
    if (item.getItemId() == R.id.reminderstatus) {
        if (YOUR_CURRENT_STATUS) {
            YOUR_CURRENT_STATUS = false;
        } else {
            YOUR_CURRENT_STATUS = true;
        }
        invalidateOptionsMenu();
    //this method refresh your Context menu view so basically call 
    // your onCreateContextMenu once again which will check for your 
    // Status and set accordingly it.
        }
    }

Simplemente verifique que este código de ejemplo lo implemente correctamente y que funcione para usted.

0
9spl 6 abr. 2017 a las 09:10