34

En mi aplicación hay un ListFragment donde cada elemento de la lista contiene una casilla de verificación. Cada vez que el usuario hace clic en una de esas casillas, la aplicación inicia un menú contextual de ActionMode. Pero quiero que la aplicación cierre el menú de ActionMode al hacer clic en otro componente. Intenté Fragment#closeContextMenu() sin éxito.¿Cómo cerrar un menú de ActionMode programmatically en Honeycomb?

¿Alguna idea de cómo puedo lograr eso?

Respuesta

78

Cada vez que se está creando/Crear a partir ActionMode por

mMode = startActionMode(....); 

para descartarla utilizar sintaxis siguiente código

if (mMode != null) 
{ 
    mMode.finish(); 
} 
+0

creo que estoy tan cansado que ni siquiera me pasó por la cabeza. ¡Gracias Vipul! – kaneda

+9

¿No hay un enfoque más "local" para este problema? Algo sin crear miembros? –

+0

Nota: algo que me consiguió - mMode debe ser un campo de clase de la actividad (como lo sugiere el nombre) ya que no puede declararlo Y usarlo en la misma devolución de llamada. – Chris

0

Kotlin

Uso ActionMode.Callback para terminar ActionMode después del elemento del menú presionado

private val actionModeCallbacks = object : ActionMode.Callback { 
    override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { 
     mode.menuInflater.inflate(R.menu.menu_action_mode, menu) 
     return true 
    } 

    override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean { 
     return false 
    } 

    override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean { 
     when (item.itemId) { 
      R.id.menu_item -> { 
       mode.finish() // after click of menu item close action mode 
       return true 
      } 
     } 
     return false 
    } 

    override fun onDestroyActionMode(mode: ActionMode) { 


    } 
} 

startSupportActionMode

(activity as AppCompatActivity).startSupportActionMode(actionModeCallbacks) 
Cuestiones relacionadas