34

В моем приложении есть ListFragment, где каждый элемент из списка содержит флажок. Всякий раз, когда пользователь нажимает на один из этих флажков, приложение запускает контекстное меню ActionMode. Но я хочу, чтобы приложение закрыло меню ActionMode при нажатии на другой компонент. Я пробовал Fragment#closeContextMenu() без успеха.Как закрыть меню ActionMode программно на Honeycomb?

Любые идеи, как я могу это сделать?

ответ

78

Всякий раз, когда вы создаете/начиная ActionMode Создать по

mMode = startActionMode(....); 

Чтобы Уволить его использовать следующий синтаксис

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

Я думаю, что я так устал, что даже не приходила мне в голову. Спасибо, Випул! – kaneda

+9

Нет ли более «локального» подхода к этой проблеме? Что-то, не создавая членов? –

+0

Примечание: что-то, что меня достало - mMode должно быть полем класса активности (как предполагает именование), поскольку вы не можете его объявить и использовать в том же обратном вызове. – Chris

0

Котлин код

Использование ActionMode.Callback закончить ActionMode после нажатия пункта меню

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^